package com.devilvan.betrice;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.IoUtil;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.support.ExcelTypeEnum;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.devilvan.betrice.aiqicha.controller.AiqichaController;
import com.devilvan.betrice.aiqicha.service.AiqichaLicenseService;
import com.devilvan.betrice.bilibili.dto.BilibiliMemberDto;
import com.devilvan.betrice.bilibili.dto.BilibiliReviewDto;
import com.devilvan.betrice.bilibili.service.BilibiliMemberService;
import com.devilvan.betrice.bilibili.service.BilibiliReviewService;
import com.devilvan.betrice.bilibili.vo.*;
import com.devilvan.betrice.brand.po.CnBrandPo;
import com.devilvan.betrice.brand.service.CnBrandService;
import com.devilvan.betrice.douban.constant.DoubanCommentRankStar;
import com.devilvan.betrice.douban.dto.DoubanCommentDto;
import com.devilvan.betrice.douban.service.DoubanCommentService;
import com.devilvan.betrice.europeacademy.constant.EuropeAcademyRedisConstant;
import com.devilvan.betrice.exception.BetriceException;
import com.devilvan.betrice.download.component.BetriceDownloadComponent;
import com.devilvan.betrice.jpxgmn.common.JpxgmnConstant;
import com.devilvan.betrice.jpxgmn.dto.JpxgmnDetailDto;
import com.devilvan.betrice.jpxgmn.dto.JpxgmnHeaderDto;
import com.devilvan.betrice.jpxgmn.mapper.JpxgmnHeaderMapper;
import com.devilvan.betrice.jpxgmn.po.JpxgmnHeaderPo;
import com.devilvan.betrice.jpxgmn.service.JpxgmnDetailService;
import com.devilvan.betrice.jpxgmn.service.JpxgmnHeaderService;
import com.devilvan.betrice.jpxgmn.vo.JpxgmnDetailVo;
import com.devilvan.betrice.jpxgmn.vo.JpxgmnHeaderVo;
import com.devilvan.betrice.mg.po.MgDetailPo;
import com.devilvan.betrice.poetry.dto.PoetryKeywordDto;
import com.devilvan.betrice.poetry.mapper.PoetryDetailMapper;
import com.devilvan.betrice.poetry.service.PoetryHeaderService;
import com.devilvan.betrice.poetry.service.PoetryKeywordService;
import com.devilvan.betrice.request.BetriceHttpBuilder;
import com.devilvan.betrice.request.pojo.BetriceHttpClient;
import com.devilvan.betrice.request.component.JsoupComponent;
import com.devilvan.betrice.europeacademy.call.EuropeAcademy;
import com.devilvan.betrice.europeacademy.constant.EuropeAcademyConstant;
import com.devilvan.betrice.europeacademy.entity.EuropeAcademyExportEntity;
import com.devilvan.betrice.europeacademy.po.EuropeAcademyAwardPo;
import com.devilvan.betrice.europeacademy.po.EuropeAcademyHeaderPo;
import com.devilvan.betrice.europeacademy.po.EuropeAcademyResumePo;
import com.devilvan.betrice.europeacademy.po.EuropeAcademyScholarshipPo;
import com.devilvan.betrice.europeacademy.service.EuropeAcademyHeaderService;
import com.devilvan.betrice.europeacademy.vo.EuropeAcademyHeaderVo;
import com.devilvan.betrice.export.component.EasyexcelComponent;
import com.devilvan.betrice.export.pojo.EasyexcelWriteDto;
import com.devilvan.betrice.request.component.HttpClientComponent;
import com.devilvan.betrice.houseprice.po.HousePricePo;
import com.devilvan.betrice.proxy.pojo.ProxyPo;
import com.devilvan.betrice.recruitment.po.BossJobPo;
import com.devilvan.betrice.recruitment.service.BossJobService;
import com.devilvan.betrice.recruitment.vo.BossJobVo;
import com.devilvan.betrice.proxy.service.ProxyService;
import com.devilvan.betrice.util.*;
import com.devilvan.betrice.houseprice.vo.HousePriceVo;
import com.github.qlone.Call;
import com.github.qlone.Response;
import com.github.qlone.RetrofitCrawler;
import io.reactivex.rxjava3.functions.Function;
import jodd.util.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestMethod;

import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;
import java.net.*;
import java.nio.channels.FileChannel;
import java.nio.file.Path;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import static com.devilvan.betrice.common.BetriceCommon.*;

/**
 * @author Evad.Wu
 * @Description HousePrice测试类
 * @date 2022-07-06
 */
@Slf4j
@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
public class DataAcquisitionTestApplication {
    private static final String u1 = "https://sz.fang.ke.com/loupan/futianqu/";

    @Resource(name = "httpClientPool")
    private PoolingHttpClientConnectionManager connectionManager;
    @Resource(name = "httpClientComponent")
    private HttpClientComponent httpClientComponent;
    @Resource(name = "betriceRedisTemplate")
    private RedisTemplate<String, Object> redisTemplate;
    @Resource(name = "threadPoolExecutor")
    private ThreadPoolExecutor executor;
    @Resource(name = "bossJobHeader")
    private Map<String, String> bossJobHeader;
    @Resource(name = "betriceDownloadComponent")
    private BetriceDownloadComponent betriceDownloadComponent;
    @Resource(name = "jsoupComponent")
    private JsoupComponent jsoupComponent;
    @Resource(name = "easyexcelComponent")
    private EasyexcelComponent easyexcelComponent;

    @Resource(name = "proxyServiceImpl")
    private ProxyService proxyService;
    @Resource(name = "bossJobServiceImpl")
    private BossJobService bossJobService;
    @Resource(name = "europeAcademyHeaderServiceImpl")
    private EuropeAcademyHeaderService europeAcademyHeaderService;
    @Resource(name = "cnBrandServiceImpl")
    private CnBrandService cnBrandService;
    @Resource(name = "aiqichaController")
    private AiqichaController aiqichaController;
    @Resource(name = "jpxgmnHeaderServiceImpl")
    private JpxgmnHeaderService jpxgmnHeaderService;
    @Resource(name = "jpxgmnDetailServiceImpl")
    private JpxgmnDetailService jpxgmnDetailService;
    @Resource(name = "jpxgmnHeaderMapper")
    private JpxgmnHeaderMapper jpxgmnHeaderMapper;
    @Resource(name = "poetryKeywordServiceImpl")
    private PoetryKeywordService poetryKeywordService;
    @Resource(name = "poetryHeaderServiceImpl")
    private PoetryHeaderService poetryHeaderService;
    @Resource(name = "poetryDetailMapper")
    private PoetryDetailMapper poetryDetailMapper;
    @Resource(name = "doubanCommentServiceImpl")
    private DoubanCommentService doubanCommentService;
    @Resource(name = "aiqichaLicenseServiceImpl")
    private AiqichaLicenseService aiqichaLicenseService;
    @Resource(name = "bilibiliReviewServiceImpl")
    private BilibiliReviewService bilibiliReviewService;
    @Resource(name = "bilibiliMemberServiceImpl")
    private BilibiliMemberService bilibiliMemberService;

    public static void main(String[] args) {
        Date date = new Date(1581535613);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(simpleDateFormat.format(date));
        String id = "V14f77aK21g6bh";
    }

    @Test
    public void testBeanCopy() {
        HousePriceVo v1 = new HousePriceVo();
        v1.setAddress("gg");
        v1.setAveragePrice("55");
        HousePriceVo v2 = new HousePriceVo();
        v2.setAddress("dd");

        UCopy.halfCopy(v2, v1);
        System.out.println(v1);
    }

    @Test
    public void testOptional() {
        HousePricePo v1 = new HousePricePo();
        v1.setAddress(Optional.ofNullable(v1.getAddress()).orElse("ZT"));
        System.out.println(v1.getAddress());
    }

    @Test
    public void testForeach() {
        List<HousePricePo> l1 = new ArrayList<>();
        HousePricePo housePricePo = new HousePricePo();
        housePricePo.setSysId("4");
        HousePricePo housePricePo1 = new HousePricePo();
        housePricePo1.setSysId("5");
        HousePricePo housePricePo2 = new HousePricePo();
        housePricePo2.setSysId("6");
        l1.add(housePricePo);
        l1.add(housePricePo1);
        l1.add(housePricePo2);

        List<HousePricePo> l2 = new ArrayList<>();
        HousePricePo housePricePo4 = new HousePricePo();
        housePricePo4.setSysId("6");
        HousePricePo housePricePo5 = new HousePricePo();
        housePricePo5.setSysId("7");
        HousePricePo housePricePo6 = new HousePricePo();
        housePricePo6.setSysId("8");
        l2.add(housePricePo4);
        l2.add(housePricePo5);
        l2.add(housePricePo6);

        int l1Size = l1.size();
        int l2Size = l2.size();
        for (int i = 0; i < l1Size; i++) {
            for (int j = 0; j < l2Size; j++) {
                if (l2.get(j).getSysId().equals(l1.get(i).getSysId())) {
                    HousePricePo po = new HousePricePo();
                    po.setSysId("99");
                    l1.set(i, po);
                }
            }
        }
        System.out.println(Arrays.toString(l1.stream().map(HousePricePo::getSysId).toArray()));
    }

//    @Test
//    public void testGroupBy() {
//        String groupId = "2420047961104013";
//        List<HousePricePo> housePricePoList = housePriceService.queryByGroupId(groupId);
//        Map<String, List<HousePricePo>> map = housePricePoList.stream().collect(Collectors.groupingBy(this::fetchGroupKey));
//        Set<Map.Entry<String, List<HousePricePo>>> entrySet = map.entrySet();
//        int count = 0;
//        for (Map.Entry<String, List<HousePricePo>> entry : entrySet) {
//            count += entry.getValue().size();
//        }
//        for (Map.Entry<String, List<HousePricePo>> entry : entrySet) {
//            List<HousePricePo> list = entry.getValue();
//            System.out.println(entry.getKey() + ": " + list + "\n");
//        }
//        System.out.println(count);
//    }

    private String fetchGroupKey(HousePricePo housePricePo) {
        List<String> list = new ArrayList<>();
        list.add(housePricePo.getCityId());
        list.add(housePricePo.getGroupId());
        list.add(housePricePo.getSysId());
        return StringUtil.join(list, ",");
    }

    @Test
    public void testBeforeDay() {
//        Calendar calendar = Calendar.getInstance();
//        calendar.add(Calendar.DAY_OF_MONTH, -3);
//        Date time = calendar.getTime();
//        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        System.out.println("Format: " + format.format(time));
        System.out.println(UCalendar.isPassDay(new Date(), 7));

    }

    @Test
    public void testGetRandomProxy() {
        ProxyPo proxyPo = proxyService.queryOneRandom();
        System.out.println(proxyPo);
    }

    @Test
    public void testGlobalException() throws ParseException {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date adsasdd = format.parse("adsasdd");
        System.out.println(adsasdd);
    }

    @Test
    public void testReachableProxy() {
        Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("47.57.188.208", 80));
        try {
            URLConnection httpCon = new URL("https://www.baidu.com/").openConnection(proxy);
            httpCon.setConnectTimeout(10000);
            httpCon.setReadTimeout(10000);
            int code = ((HttpURLConnection) httpCon).getResponseCode();
            System.out.println(code == 200);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Test
    public void testCache() {
        System.out.println(redisTemplate.opsForSet().randomMember(CACHE_RANDOM_USER_AGENT));
    }

    @Test
    public void splitCookie() {
//        String cookie = "warlockjssdkcross=%7B%22distinct_id%22%3A%22180bcc1227da70-0a97f9d1e4c544-e726559-1821369-180bcc1227eb46%22%2C%22first_id%22%3A%22%22%2C%22props%22%3A%7B%7D%2C%22device_id%22%3A%22180bcc1227da70-0a97f9d1e4c544-e726559-1821369-180bcc1227eb46%22%7D; lastCity=101280600; wd_guid=39f31007-a9c1-44ae-b5e9-4f6ca909dad5; historyState=state; _bl_uid=hjl2y6d0dqXjthmCOytFx9Ft93th; _9755xjdesxxd_=32; YD00951578218230%3AWM_TID=%2FhkEUlFNgkdAQQQQABORTSlKk0tQhJa7; acw_tc=0bd17c0e16597551834292564e0138ade8bc71792da5f8da64b311805fa9c2; __zp_seo_uuid__=7eeb10a8-5370-4d99-82b1-3339dd47d54d; __g=-; Hm_lvt_194df3105ad7148dcf2b98a91b5e727a=1659527177,1659681043,1659755184; gdxidpyhxdE=E42jfNBDG%2FNUZpx8b9UiqzzBsuc7PG38bkDsqJeMqAiBfup5xJPQZ6rtGSKMzi%5CtekR%2BdTOJvUBQy7m4EkrkNBDLnhUHpjRBVB215moxMTHtTVj7lzNmDHsw1fipLSHhxWTl6cIyhmXtHQWwHBHgSStnN4POMSU8brvE%2BSDiJh7mJQa5%3A1659756107841; YD00951578218230%3AWM_NI=XD%2FCXiptSoeFNeKyxasX9J96xdVF7kF8SpKzhEU4PO9AUsS2d9c7uYbxYROk6gcHvIyw3Oec1D7IorwcZkuettRlf%2BoJDYOAN%2FlFd8g5SZUwo0dXKPgiapCmOIQ3H1r8Ylc%3D; YD00951578218230%3AWM_NIKE=9ca17ae2e6ffcda170e2e6ee8bfb54f492bb97bc6b98bc8ea6c85f928e9eacc8608ceb98b3ae398e8faf8af22af0fea7c3b92a9c9ce1a4db63b4ac9d90e84e8ebb859afb6bb188f7abbc3ebcbc9aa7b66186e89d91ca72ac9b9bd5d345fb9f9b94d23aa8e7add8f853a2a897b3ce61f6b9ada9f543bba9fdb0e869f39cf9aaee7ab5bd968cf86fb8ac9e8de521ad968cbace4b8ef1a4a7e734a5eb9dbbd87dadf0acb9ca5ca5b7af91c2678d979fd4cb3bb2e8978de237e2a3; __l=r=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DAApX6qSQB3cso2vjhFEhdcyBBpy0-km4I_BdaNNk5rU6ESdyqtL8T8YobeOcjrpw%26wd%3D%26eqid%3Dd341930700173e040000000662eddaac&l=%2Fwww.zhipin.com%2Fweb%2Fgeek%2Frobots.txt&s=3&g=&friend_source=0&s=3&friend_source=0; JSESSIONID=057FD525896B16F518C94CD2F85055F1; Hm_lpvt_194df3105ad7148dcf2b98a91b5e727a=1659755676; wt2=D688DMNLREziAerLQm6WELmdo218duOnz4-6AuQHXU6HdINynCBA1oVTjPzr_c82lYjURis7EM5ARsTivwCag4A~~; wbg=0; __c=1659755184; __a=23684684.1652434216.1659681043.1659755184.31.5.7.27; geek_zp_token=V1RNojFeH73VxjVtRvyhQfLC2y7zzUwS8~; __zp_stoken__=a22deJAcnOTQybGFTNnxNYXNKKG9EcxBqYFV%2FKz9ba0FLZFR0QAQZdXYheCBzSWplLUdfPRNneCUJPE0Yc2VZQ1dGXkNEG2glbCMHV1R9OyoNIBtJOAYMFwtbRD92Jgkub35tQxcGDVg2eT4%3D";
        String cookie = "warlockjssdkcross=%7B%22distinct_id%22%3A%22180bcc1227da70-0a97f9d1e4c544-e726559-1821369-180bcc1227eb46%22%2C%22first_id%22%3A%22%22%2C%22props%22%3A%7B%7D%2C%22device_id%22%3A%22180bcc1227da70-0a97f9d1e4c544-e726559-1821369-180bcc1227eb46%22%7D; lastCity=101280600; wd_guid=39f31007-a9c1-44ae-b5e9-4f6ca909dad5; historyState=state; _bl_uid=hjl2y6d0dqXjthmCOytFx9Ft93th; _9755xjdesxxd_=32; YD00951578218230%3AWM_TID=%2FhkEUlFNgkdAQQQQABORTSlKk0tQhJa7; __zp_seo_uuid__=7eeb10a8-5370-4d99-82b1-3339dd47d54d; __g=-; Hm_lvt_194df3105ad7148dcf2b98a91b5e727a=1659527177,1659681043,1659755184; gdxidpyhxdE=E42jfNBDG%2FNUZpx8b9UiqzzBsuc7PG38bkDsqJeMqAiBfup5xJPQZ6rtGSKMzi%5CtekR%2BdTOJvUBQy7m4EkrkNBDLnhUHpjRBVB215moxMTHtTVj7lzNmDHsw1fipLSHhxWTl6cIyhmXtHQWwHBHgSStnN4POMSU8brvE%2BSDiJh7mJQa5%3A1659756107841; YD00951578218230%3AWM_NI=XD%2FCXiptSoeFNeKyxasX9J96xdVF7kF8SpKzhEU4PO9AUsS2d9c7uYbxYROk6gcHvIyw3Oec1D7IorwcZkuettRlf%2BoJDYOAN%2FlFd8g5SZUwo0dXKPgiapCmOIQ3H1r8Ylc%3D; YD00951578218230%3AWM_NIKE=9ca17ae2e6ffcda170e2e6ee8bfb54f492bb97bc6b98bc8ea6c85f928e9eacc8608ceb98b3ae398e8faf8af22af0fea7c3b92a9c9ce1a4db63b4ac9d90e84e8ebb859afb6bb188f7abbc3ebcbc9aa7b66186e89d91ca72ac9b9bd5d345fb9f9b94d23aa8e7add8f853a2a897b3ce61f6b9ada9f543bba9fdb0e869f39cf9aaee7ab5bd968cf86fb8ac9e8de521ad968cbace4b8ef1a4a7e734a5eb9dbbd87dadf0acb9ca5ca5b7af91c2678d979fd4cb3bb2e8978de237e2a3; JSESSIONID=057FD525896B16F518C94CD2F85055F1; wt2=D688DMNLREziAerLQm6WELmdo218duOnz4-6AuQHXU6HdINynCBA1oVTjPzr_c82lYjURis7EM5ARsTivwCag4A~~; wbg=0; acw_tc=0bd17c0e16597607547172757e01352ac5ac305b6c60b6c72362d92a79cd1c; __l=r=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DAApX6qSQB3cso2vjhFEhdcyBBpy0-km4I_BdaNNk5rU6ESdyqtL8T8YobeOcjrpw%26wd%3D%26eqid%3Dd341930700173e040000000662eddaac&l=%2Fwww.zhipin.com%2Fweb%2Fgeek%2Frecommend%3FexpectId%3Df70842c53a8e614e1HZ83tq7GFRT%26sortType%3D1%26page%3D1%26cityCode%3D101280600&s=3&g=&friend_source=0&s=3&friend_source=0; Hm_lpvt_194df3105ad7148dcf2b98a91b5e727a=1659761699; __c=1659755184; __a=23684684.1652434216.1659681043.1659755184.39.5.15.35; geek_zp_token=V1RNojFeH73VxjVtRvyhQfLymy6D7exi4~; __zp_stoken__=a22deJFBmcmokTUpvZWRlIUMDeDRzcm1zflI%2FbjAPP3RCaiNcGSgoamFLeWRuHzZlLUdfPRNnD3thSToYb2MxeztsUjJrOV8PAy0GV1R9OyoNIBsVbhtIFmFMWw5afwkub35tQxcGDVg2eT4%3D";
        String[] split = cookie.split("; ");
        for (String s : split) {
            System.out.println(s);
        }
    }

    @Test
    @Transactional
    @Rollback(false)
    public void parseBossJson() {
//        String request = "{\"securityId\":\"xRObFEHIzpQpJ-s1VztqaIN6CJImb0WmuZ8jqgTXFlotXw1Wb9gICpFLmVGbcJRwjp2bHvkBqF_4sEGy0KtFE3zvd2nK7hrzm0Isno-MYgLnAo77OncN7MF72YPWI19mjxrRZBaVNHSzcwQz\",\"bossAvatar\":\"https://img.bosszhipin.com/boss/avatar/avatar_1.png\",\"bossCert\":3,\"encryptBossId\":\"b32de452fc4a587d0nZ70tq0EFJX\",\"bossName\":\"李先生\",\"bossTitle\":\"HR\",\"goldHunter\":0,\"bossOnline\":false,\"encryptJobId\":\"77a942526b159d901nBz3N-9GVVU\",\"expectId\":326576863,\"jobName\":\"Hadoop大数据工程师\",\"lid\":\"ef036d32-61bb-47aa-845d-fe21c2ad9ae5.f1:common.eyJzZXNzaW9uSWQiOiI5NTAwMTA0Zi1lNjU3LTRiMjAtYjQ1Yi1jMTIwNGJiOWIzNjIiLCJyY2RCelR5cGUiOiJmMV9ncmNkIn0.2\",\"salaryDesc\":\"13-26K\",\"jobLabels\":[\"1-3年\",\"本科\"],\"jobValidStatus\":1,\"iconWord\":\"\",\"skills\":[\"SQL\",\"Python\",\"Shell\",\"Java\",\"Scala\",\"Spark\",\"Hadoop\",\"HDFS\"],\"jobExperience\":\"1-3年\",\"daysPerWeekDesc\":\"\",\"leastMonthDesc\":\"\",\"jobDegree\":\"本科\",\"cityName\":\"深圳\",\"areaDistrict\":\"福田区\",\"businessDistrict\":\"会展中心\",\"jobType\":0,\"proxyJob\":0,\"proxyType\":0,\"anonymous\":0,\"outland\":0,\"optimal\":0,\"iconFlagList\":null,\"itemId\":0,\"city\":0,\"isShield\":0,\"encryptBrandId\":\"8a9e35496bb5426b1nB93dm9FFY\",\"brandName\":\"君达\",\"brandLogo\":\"https://img.bosszhipin.com/beijin/mcs/chatphoto/20210511/8a0502092f50b75527e1254e8a12fa81b90b96e8ff2846756d058c693ed3a2ce_s.jpg\",\"brandStageName\":\"未融资\",\"brandIndustry\":\"互联网\",\"brandScaleName\":\"500-999人\",\"welfareList\":[\"节日福利\",\"年终奖\",\"带薪年假\",\"零食下午茶\",\"补充医疗保险\",\"加班补助\",\"定期体检\",\"员工旅游\",\"五险一金\"],\"industry\":0,\"contact\":false}";
//        BossJobVo bossJobVo = JSONObject.parseObject(request, BossJobVo.class);
        String url = "https://www.zhipin.com/wapi/zpgeek/search/joblist.json?scene=1&query=&city=101280600&experience=&degree=&industry=&scale=&stage=&position=100101&salary=&multiBusinessDistrict=&page=2&pageSize=30";
        Map<String, String> params = Map.of(
                "scene", "1",
                "query", "Java开发",
                "city", "101280600",
                "position", "100101",
                "page", "1",
                "pageSize", "30"
        );
        BetriceHttpClient betriceHttpClient = BetriceHttpBuilder.create().setHttpRequest(RequestMethod.GET, url, params).setHeaders(bossJobHeader).build();
        String requestJson = httpClientComponent.doExecute(betriceHttpClient);
        JSONObject zpData = JSONObject.parseObject(requestJson).getJSONObject("zpData");
        Integer resCount = zpData.getInteger("resCount");
        List<BossJobVo> bossJobVoList = zpData.getJSONArray("jobList").toJavaList(BossJobVo.class);
        bossJobVoList = Optional.of(bossJobVoList).orElseThrow(() -> new BetriceException("不能为空"));
        bossJobService.doBoss(bossJobVoList);
    }

    @Test
    public void testDisjunction() {
        Set<String> skills = Set.of("Java", "Python");
        Set<String> skillSet = Set.of("JAVA", "CSS", "C++");
        Collection<String> disjunction = CollUtil.disjunction(skillSet, skills);
        for (String i : disjunction) {
            for (String j : disjunction) {
                if (i.equalsIgnoreCase(j)) {
                    disjunction.remove(i);
                }
            }
        }
        System.out.println(disjunction);
    }

    @Test
    public void testCalendar() {
        Calendar calendar0 = Calendar.getInstance();
        calendar0.add(Calendar.DAY_OF_MONTH, -1);
        Date yesterday = calendar0.getTime();
        System.out.println("yesterday: " + yesterday);

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(yesterday);
        calendar.add(Calendar.DAY_OF_MONTH, 7);
        Date passDay = calendar.getTime();
        System.out.println("passDay: " + passDay);
        System.out.println(yesterday.after(passDay));
    }

    @Test
    public void testFunction() {
        BossJobPo bossJobPo = new BossJobPo();
        bossJobPo.setJobId("213123");
        Function<BossJobPo, String> getJobId = BossJobPo::getJobId;
        try {
            String apply = getJobId.apply(bossJobPo);
            System.out.println(apply);
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
    }

    @Test
    public void testIOStream() {
        String picPath =
                "https://p.jpmn5.com/Uploadfile/202211/14/0B1888232.jpg";
//                "http://a1.qpic.cn/psc?/V14f77aK21g6bh/gZJkV0R4*Tt*yk3U.9dESgrTPyrnX*8sCl3VygjBacR1aFuYeBhCYfotS6jfjOE4OLAS5paUOlQpYO117FqHjA!!/b&ek=1&kp=1&pt=0&bo=DAVfAwAAAAADh*c!&tl=1&vuin=1005338848&tm=1661785200&dis_t=1661786143&dis_k=9d741865cdd02ded81eda799f6f8709f&sce=60-1-1&rf=0-0";
        String savePath = "D:\\Mine\\杂物\\good4.jpg";
        HttpRequestBase request = httpClientComponent.generateHttpRequest(RequestMethod.GET, picPath);
        betriceDownloadComponent.download(request, savePath);
    }

    @Test
    public void testEuropeAcademy() {
        List<String> detailUrlList = new ArrayList<>();
        String url = "https://www.ae-info.org/ae/Acad_Main/List_of_Members/ListMembersBySection?type=listsection&pagenr=-1";
        Connection connection = jsoupComponent.getJsoupConnection(url);
        try {
            Element body = connection.get().body();
            Elements detailList = body.select("span[class='name'] b a");
            for (Element detail : detailList) {
                String href = detail.attr("href");
                detailUrlList.add(href);
            }
            redisTemplate.opsForList().rightPushAll(EuropeAcademyRedisConstant.KEY_EUROPE_ACADEMY_MEMBER_DETAIL, detailUrlList);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Test
    public void testEuropeAcademy2() {
        String url = "https://www.ae-info.org/ae/Member/Agami_Reuven";
        RetrofitCrawler retrofitCrawler = new RetrofitCrawler.Builder().baseUrl(url).build();
        EuropeAcademy baidu = retrofitCrawler.create(EuropeAcademy.class);
        Response<EuropeAcademyHeaderVo> response;
        try {
            Call<EuropeAcademyHeaderVo> europeAcademyHeaderVoCall = baidu.crawlHead();
            response = europeAcademyHeaderVoCall.execute();
            EuropeAcademyHeaderVo body = response.body();
            System.out.println(body);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void testEuropeAcademy3() {
        EuropeAcademyHeaderVo europeAcademyHeaderVo = new EuropeAcademyHeaderVo();
        String url = "https://www.ae-info.org/ae/User/Jones_Simon_Arnett";
        Connection connection = jsoupComponent.getJsoupConnection(url);
        try {
            Element body = connection.get().body();
            String name = body.select("#pagecontent>*:first-child").text().replace("#", "");
            String avatar = body.select("div[class='image_default']>a").attr("href");
            europeAcademyHeaderVo.setName(name);
            europeAcademyHeaderVo.setAvatar(avatar);
            List<String> membershipBasicInfoList = body.select("table[class='memberinfo']>tbody>tr").eachText();
            copyToEuropeAcademyHeaderVo(europeAcademyHeaderVo, collToMap(membershipBasicInfoList));
            Elements ulList = body.select("#pagecontent ul");
            for (int i = 0; i < ulList.size(); i++) {
                if (i == 0) {
                    List<String> resumeList = ulList.get(i).select("li").eachText();
                    europeAcademyHeaderVo.setResumeList(resumeList);
                } else if (i == 1) {
                    List<String> scholarshipList = ulList.get(i).select("li").eachText();
                    europeAcademyHeaderVo.setScholarshipList(scholarshipList);
                } else if (i == 2) {
                    List<String> awardList = ulList.get(i).select("li").eachText();
                    europeAcademyHeaderVo.setAwardList(awardList);
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(europeAcademyHeaderVo);
    }

    public Map<String, String> collToMap(List<String> membershipBasicInfoList) {
        Map<String, String> map = new HashMap<>();
        for (String s : membershipBasicInfoList) {
            String[] split = s.split(": ");
            map.put(split[0], split[1]);
        }
        return map;
    }

    public void copyToEuropeAcademyHeaderVo(EuropeAcademyHeaderVo europeAcademyHeaderVo, Map<String, String> map) {
        Set<Map.Entry<String, String>> entrySet = map.entrySet();
        for (Map.Entry<String, String> entry : entrySet) {
            if (EuropeAcademyConstant.MEMBERSHIP_NUMBER.equals(entry.getKey())) {
                europeAcademyHeaderVo.setMembershipId(Long.valueOf(entry.getValue()));
            } else if (EuropeAcademyConstant.MEMBERSHIP_TYPE.equals(entry.getKey())) {
                europeAcademyHeaderVo.setMemberType(entry.getValue());
            } else if (EuropeAcademyConstant.SECTION.equals(entry.getKey())) {
                europeAcademyHeaderVo.setSection(entry.getValue());
            } else if (EuropeAcademyConstant.AFFILIATED_SECTION.equals(entry.getKey())) {
                europeAcademyHeaderVo.setAffiliatedSection(entry.getValue());
            } else if (EuropeAcademyConstant.ELECTED.equals(entry.getKey())) {
                europeAcademyHeaderVo.setElected(entry.getValue());
            } else if (EuropeAcademyConstant.MAIN_COUNTRY_OF_RESIDENCE.equals(entry.getKey())) {
                europeAcademyHeaderVo.setMainResidence(entry.getValue());
            } else if (EuropeAcademyConstant.HOME_PAGE.equals(entry.getKey())) {
                europeAcademyHeaderVo.setHomePage(entry.getValue());
            } else if (EuropeAcademyConstant.ORCID.equals(entry.getKey())) {
                europeAcademyHeaderVo.setOrcId(entry.getValue());
            }
        }
    }

    @Test
    public void testExportExcel() {
        Page<EuropeAcademyHeaderPo> page = new Page<>(1, 500);
        List<EuropeAcademyHeaderPo> europeAcademyHeaderPoList = europeAcademyHeaderService.findEuropeAcademyHeaderPage(page);
        List<EuropeAcademyExportEntity> entityList = europeAcademyHeaderPoList.stream().map(m -> {
            EuropeAcademyExportEntity europeAcademyExportEntity = new EuropeAcademyExportEntity();
            UCopy.fullCopy(m, europeAcademyExportEntity, "resumeList", "scholarshipList", "awardList");
            List<EuropeAcademyAwardPo> awardPoList = m.getAwardPoList();
            if (Optional.ofNullable(awardPoList).isPresent()) {
                StringBuilder sb = new StringBuilder();
                int count = 1;
                int len = awardPoList.size();
                for (int i = 0; i < len; i++) {
                    if (i + 1 >= len) {
                        sb.append(count).append(". ").append(awardPoList.get(i).getAward());
                    } else {
                        sb.append(count).append(". ").append(awardPoList.get(i).getAward()).append("\n");
                    }
                    count++;
                }
                europeAcademyExportEntity.setAward(sb.toString());
            }
            List<EuropeAcademyScholarshipPo> scholarshipPoList = m.getScholarshipPoList();
            if (Optional.ofNullable(scholarshipPoList).isPresent()) {
                StringBuilder sb = new StringBuilder();
                int count = 1;
                int len = scholarshipPoList.size();
                for (int i = 0; i < len; i++) {
                    if (i + 1 >= len) {
                        sb.append(count).append(". ").append(scholarshipPoList.get(i).getScholarship());
                    } else {
                        sb.append(count).append(". ").append(scholarshipPoList.get(i).getScholarship()).append("\n");
                    }
                    count++;
                }
                europeAcademyExportEntity.setScholarship(sb.toString());
            }
            List<EuropeAcademyResumePo> resumePoList = m.getResumePoList();
            if (Optional.ofNullable(resumePoList).isPresent()) {
                StringBuilder sb = new StringBuilder();
                int count = 1;
                int len = resumePoList.size();
                for (int i = 0; i < len; i++) {
                    if (i + 1 >= len) {
                        sb.append(count).append(". ").append(resumePoList.get(i).getResume());
                    } else {
                        sb.append(count).append(". ").append(resumePoList.get(i).getResume()).append("\n");
                    }
                    count++;
                }
                europeAcademyExportEntity.setResume(sb.toString());
            }
            return europeAcademyExportEntity;
        }).toList();
        EasyexcelWriteDto writeVo = new EasyexcelWriteDto(
                "D:\\Mine\\杂物", "\\欧洲学术-样例打印", ExcelTypeEnum.XLS, "欧洲学术成员", EuropeAcademyExportEntity.class
        );
        ExcelWriter excelWriter = easyexcelComponent.doExcelWriter(writeVo);
        WriteSheet writeSheet = easyexcelComponent.doWriteSheet("欧洲学术成员");
        excelWriter.write(entityList, writeSheet);
        excelWriter.write(entityList, writeSheet);
        easyexcelComponent.doFinish(excelWriter);
    }

    @Test
    public void testCnBrand() throws IOException {
        String industryUrl = "https://www.chinapp.com/paihang/zhuangxiujiancai";
//        String dataFid = jsoupComponent.getJsoupConnection(industryUrl).get().select("div.rank_title_box > ul > li:nth-child(1)").attr("data-fid");
//        System.out.println(dataFid);
        Elements ulList = jsoupComponent.getJsoupConnection(industryUrl).get().select("div.rank_title_box > ul > li");
        String dataFid = null;
        for (Element li : ulList) {
            if (dataFid == null) {
                dataFid = li.attr("data-fid");
            }
            String dataVotetype = li.attr("data-votetype");
            if ("shida".equals(dataVotetype)) {
                System.out.println("品牌榜：" + li.cssSelector());
            } else if ("favor".equals(dataVotetype)) {
                System.out.println("优选榜：" + li.cssSelector());
            } else if ("acute".equals(dataVotetype)) {
                System.out.println("新锐榜：" + li.cssSelector());
            } else if ("famous".equals(dataVotetype)) {
                System.out.println("人气榜：" + li.cssSelector());
            }
        }
    }

    @Test
    public void cnBrandToRedis() {
        final String KEY_SNAP_BRAND_URL = "snap_brand_url";
        List<CnBrandPo> allIndustryUrlName = cnBrandService.findAllIndustryUrlName();
        List<String> stringList = allIndustryUrlName.stream().map(m -> m.getIndustryUrl() + "," + m.getIndustryName()).toList();
        redisTemplate.opsForList().rightPushAll(KEY_SNAP_BRAND_URL, stringList);
    }

    @Test
    public void doAiqicha() {
        Map<String, String> header = Map.of("Referer", "https://aiqicha.baidu.com/company_detail_76462054831261");
//        String url = "https://aiqicha.baidu.com/detail/entBasicAllDataAjax?pid=76462054831261";
        String url = "https://aiqicha.baidu.com/detail/entBasicAllDataAjax";
        Map<String, String> params = Map.of("pid", "76462054831261");
        BetriceHttpClient betriceHttpClient = BetriceHttpBuilder.create().setHttpRequest(RequestMethod.GET, url, params).setHeaders(header).build();
        String json = httpClientComponent.doExecute(betriceHttpClient);
        System.out.println(json);
    }

    @Test
    public void testJpxgmn() {
        String jpmn5 = JpxgmnConstant.JPMN5.getUrl();
        String indexAsp = "/plus/search/index.asp";
        String url = jpmn5 + indexAsp;
        String keyword = "小热巴";
        Map<String, Object> params = Map.of("keyword", keyword);
        String httpGetUrl = UString.generateHttpParamUrl(url, params);
        System.out.println(httpGetUrl);
        Map<String, String> headers = new HashMap<>();
        headers.put("cookie", "cfstatshowcookie=jpxgyw; Hm_lvt_0410920d9a89d99a42354a0d16b144db=1668594853,1668661919; ASPSESSIONIDACBARTDR=OBAEAAOCJFJAFJGJKJGCFOCB; Hm_lpvt_0410920d9a89d99a42354a0d16b144db=1668664511");
        headers.put("referer", jpmn5);
        Connection jsoupConnection = jsoupComponent.getJsoupConnection(httpGetUrl, headers);
        Element body = null;
        try {
            body = jsoupConnection.get().body();
            // 关键字查询结果总页码
        } catch (IOException e) {
            e.printStackTrace();
        }
        assert body != null;
        Elements totalPage = body.select("div.pagination:nth-child(2)>ul>a");
        System.out.println("页数：" + totalPage.size());
        for (int i = 1; i < totalPage.size(); i++) {
            final int fi = i;
//            executor.execute(() -> {
            Element pageElem = totalPage.get(fi);
            Integer currentPage = Integer.parseInt(pageElem.text());
            String currentLink = url + pageElem.attr("href");
            System.out.println(currentLink);
            Connection innerJsoupConnection = jsoupComponent.getJsoupConnection(currentLink, headers);
            Element innerBody = null;
            try {
                innerBody = innerJsoupConnection.get().body();
            } catch (IOException e) {
                e.printStackTrace();
            }
            assert innerBody != null;
            Elements rows = innerBody.select("div.node>p>a");
            Elements infoList = innerBody.select("div.node>div.info>span:nth-child(1)");
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
            List<JpxgmnHeaderVo> jpxgmnHeaderVoList = new ArrayList<>();
            for (int j = 0; j < rows.size(); j++) {
                Element row = rows.get(j);
                String href = row.attr("href");
                String title = row.text();
                String pid = href.substring(href.lastIndexOf("/")).replace(".html", "");
                JpxgmnHeaderVo jpxgmnHeaderVo = new JpxgmnHeaderVo();
                jpxgmnHeaderVo.setUrl(jpmn5 + href);
                jpxgmnHeaderVo.setPid(pid);
                jpxgmnHeaderVo.setTitle(title);
                jpxgmnHeaderVo.setName(keyword);
                jpxgmnHeaderVo.setPageNum(currentPage);
                try {
                    jpxgmnHeaderVo.setPmodifyTime(simpleDateFormat.parse(infoList.get(j).text()));
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                jpxgmnHeaderVoList.add(jpxgmnHeaderVo);
            }
            jpxgmnHeaderVoList.forEach(System.out::println);
            List<JpxgmnHeaderDto> jpxgmnHeaderDtoList = UCopy.fullCopyCollections(jpxgmnHeaderVoList, JpxgmnHeaderDto.class);
            jpxgmnHeaderService.saveUpdateBatch(jpxgmnHeaderDtoList);
//            });
        }

    }

    @Test
    public void testJpxgmnDetail() {
        // referer需要
        String jpmn5 = JpxgmnConstant.JPMN5.getUrl();
        String indexAsp = "/plus/search/index.asp";
        String url = jpmn5 + indexAsp;
        String keyword = "王雨纯";
        Map<String, Object> params = Map.of("keyword", keyword);
        String httpGetUrl = UString.generateHttpParamUrl(url, params);
        System.out.println(httpGetUrl);

        String pid = "/XingYan24005";
        JpxgmnHeaderPo jpxgmnHeaderPo = jpxgmnHeaderService.findByPid(pid);
        Map<String, String> headers = new HashMap<>();
        String detailUrl = "https://www.jpmn5.com/XingYan/XingYan24005.html";
        headers.put("cookie", "Hm_lvt_0410920d9a89d99a42354a0d16b144db=1668594853; cfstatshowcookie=jpxgyw; ASPSESSIONIDCCACSRCQ=LNDFEHDCKGPDLOPHHKOFFAIK; Hm_lpvt_0410920d9a89d99a42354a0d16b144db=1668600346");
        headers.put("referer", httpGetUrl);
        Connection jsoupConnection = jsoupComponent.getJsoupConnection(detailUrl, headers);
        Element body = null;
        try {
            body = jsoupConnection.get().body();
        } catch (IOException e) {
            e.printStackTrace();
        }
        assert body != null;
        // 获取总页数
        Elements pageElement = body.select("div.pagination:nth-child(1)>ul>a");
        // 删除最后一个'下一页'
        pageElement.remove(pageElement.size() - 1);
        int totalPage = pageElement.size();
        List<JpxgmnDetailVo> jpxgmnDetailVoList = new CopyOnWriteArrayList<>();
        String lastRefererLink = null;
        for (Element currentPage : pageElement) {
            String currentLink = jpmn5 + currentPage.attr("href");
            // 分页请求，每次都要带上上一页的URL
            if (UEmpty.isEmpty(lastRefererLink)) {
                lastRefererLink = httpGetUrl;
            }
            headers.put("referer", lastRefererLink);
            Connection innerJsoupConnection = jsoupComponent.getJsoupConnection(currentLink, headers);
            Element innerBody = null;
            try {
                innerBody = innerJsoupConnection.get().body();
            } catch (IOException e) {
                e.printStackTrace();
            }
            assert innerBody != null;
            Elements imgList = innerBody.select("article.article-content>p>img");
            for (Element img : imgList) {
                String picLink = img.attr("src");
                JpxgmnDetailVo jpxgmnDetailVo = new JpxgmnDetailVo();
                jpxgmnDetailVo.setPid(pid);
                String pJpmn5 = jpmn5.replace("www", "p").replace("uploadfile", "Uploadfile");
                jpxgmnDetailVo.setPicUrl(pJpmn5 + picLink);
                jpxgmnDetailVoList.add(jpxgmnDetailVo);
            }
            lastRefererLink = currentLink;
        }
        List<JpxgmnDetailDto> jpxgmnDetailDtoList = UCopy.fullCopyCollections(jpxgmnDetailVoList, JpxgmnDetailDto.class);
        jpxgmnDetailService.saveUpdateBatch(jpxgmnDetailDtoList);
    }

    @Test
    public void modifyPicUrl() {
        jpxgmnDetailService.updatePicUrlToUpper();
    }

    @Test
    public void testThreadObject() {
        Page<JpxgmnHeaderPo> headerIsNotCrawl = jpxgmnHeaderMapper.findHeaderIsNotCrawl(null, new Page<>(1, 2));
        List<JpxgmnHeaderPo> jpxgmnHeaderPoList = headerIsNotCrawl.getRecords();
        for (JpxgmnHeaderPo jpxgmnHeaderPo : jpxgmnHeaderPoList) {
            executor.execute(() -> {
//                ReentrantLock rlock = new ReentrantLock();
//                rlock.lock();
//                try {
                jpxgmnHeaderPo.setLogicDel(true);
//                } catch (Exception e) {
//                    e.printStackTrace();
//                } finally {
//                    rlock.unlock();
//                }
            });
        }
        jpxgmnHeaderPoList.forEach(f -> System.out.println(f.getLogicDel() + ", " + f.getPid() + ", " + f.getName()));
    }

    @Test
    public void testRebuildHttpClient() {
        Map<String, String> headers = new HashMap<>();
        headers.put("cookie", "Hm_lvt_0410920d9a89d99a42354a0d16b144db=1668594853; cfstatshowcookie=jpxgyw; ASPSESSIONIDCCACSRCQ=LNDFEHDCKGPDLOPHHKOFFAIK; Hm_lpvt_0410920d9a89d99a42354a0d16b144db=1668600346");
        Map<String, String> params = Map.of(
                "scene", "1",
                "query", "Java开发",
                "city", "101280600",
                "position", "100101",
                "page", "1",
                "pageSize", "30"
        );
        BetriceHttpClient httpClient = BetriceHttpBuilder.create()
                .setHttpRequest(RequestMethod.GET, "https://www.baidu.com", params)
                .setHeaders(headers)
                .build();
        System.out.println(httpClient);
    }

    @Test
    public void testParseGushiwen() {
        final String GUSHIWEN_DEFAULT_URL = "https://so.gushiwen.cn";
        Element body = null;
        try {
            body = Jsoup.parse(new File("D:\\Mine\\Maven\\Betrice\\betrice-data-acquisition\\src\\main\\resources\\viewsource\\古诗文网-网页源码.txt"), "UTF-8").body();
        } catch (IOException e) {
            e.printStackTrace();
        }
        assert body != null;
        Elements keywordElements = body.select("div.sright>a");
        List<PoetryKeywordDto> poetryKeywordDtoList = new ArrayList<>();
        for (Element keywordElement : keywordElements) {
            PoetryKeywordDto poetryKeywordDto = new PoetryKeywordDto();
            String keyword = keywordElement.text();
            String keywordUrl = GUSHIWEN_DEFAULT_URL + keywordElement.attr("href");
            poetryKeywordDto.setKeyword(keyword);
            poetryKeywordDto.setKeywordUrl(keywordUrl);
            poetryKeywordDtoList.add(poetryKeywordDto);
        }
        poetryKeywordDtoList.forEach(System.out::println);
    }

    @Test
    public void testParseGushiwenCrawler() {
        final String GUSHIWEN_SHIWEN_URL = "https://so.gushiwen.cn/shiwens";
        final String GUSHIWEN_DEFAULT_URL = "https://so.gushiwen.cn";
        Element body = jsoupComponent.getBody(GUSHIWEN_SHIWEN_URL);
        Elements keywordElements = body.select("div.sright>a");
        List<PoetryKeywordDto> poetryKeywordDtoList = new ArrayList<>();
        for (Element keywordElement : keywordElements) {
            PoetryKeywordDto poetryKeywordDto = new PoetryKeywordDto();
            String keyword = keywordElement.text();
            String keywordUrl = GUSHIWEN_DEFAULT_URL + keywordElement.attr("href");
            poetryKeywordDto.setKeyword(keyword);
            poetryKeywordDto.setKeywordUrl(keywordUrl);
            poetryKeywordDtoList.add(poetryKeywordDto);
        }
        poetryKeywordService.saveUpdateBatch(poetryKeywordDtoList);
    }

    @Test
    public void testFindExistPoetryDetail() {
        System.out.println(poetryDetailMapper.findExsistByTitleAndAuthor("两小儿辩日", null));
    }

    @Test
    public void testParseDoubanMovieComment() {
        Element body = jsoupComponent.parse("D:\\Mine\\Maven\\Betrice\\betrice-data-acquisition\\src\\main\\resources\\viewsource\\教父短评-网页源码.txt");
        Elements commentItemList = body.select("div#comments>div.comment-item");
        Long pid = 1291841L;
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        List<DoubanCommentDto> doubanCommentDtoList = new ArrayList<>();
        for (Element commentItem : commentItemList) {
            Long commentId = Long.valueOf(commentItem.attr("data-cid"));
            Element commentInfo = commentItem.selectFirst("div.comment>h3>span.comment-info");
            Element reviewerUrlName = commentInfo.selectFirst("a");
            String reviewerUrl = reviewerUrlName.attr("href");
            String name = reviewerUrlName.text();
            String isWatched = commentItem.selectFirst("div.comment > h3 > span.comment-info > span:nth-child(2)").text();
            boolean watchedStatus = "看过".equals(isWatched);
            String rankStarTitle = commentItem.selectFirst("span:nth-child(3)").attr("title");
            Integer rankStar = DoubanCommentRankStar.getStarByTitle(rankStarTitle);
            String commentTimeText = commentItem.selectFirst("div.comment > h3 > span.comment-info > span.comment-time").text();
            Date commentTime = null;
            try {
                commentTime = dateFormat.parse(commentTimeText);
            } catch (ParseException e) {
                e.printStackTrace();
            }
            Integer voteCount = Integer.valueOf(commentItem.selectFirst("div.comment>h3>span.comment-vote>span").text());
            String content = commentItem.selectFirst("div.comment>p>span").text();
            DoubanCommentDto doubanCommentDto = new DoubanCommentDto();
            doubanCommentDto.setPid(pid);
            doubanCommentDto.setCommentId(commentId);
            doubanCommentDto.setReviewer(name);
            doubanCommentDto.setReviewerUrl(reviewerUrl);
            doubanCommentDto.setWatchedStatus(watchedStatus);
            doubanCommentDto.setRankStar(rankStar);
            doubanCommentDto.setCommentDate(commentTime);
            doubanCommentDto.setAffirm(voteCount);
            doubanCommentDto.setContent(content);
            doubanCommentDtoList.add(doubanCommentDto);
        }
        doubanCommentService.saveUpdateBatch(doubanCommentDtoList);
    }

    @Test
    public void parseBilibiliVideo() throws IOException {
        String json = IoUtil.readUtf8(FileChannel.open(Path.of("D:\\Mine\\文本文件\\bilibili-view.json")));
        System.out.println(json);
    }

    @Test
    public void testAbsentMapper() {
        System.out.println(aiqichaLicenseService.findAllList());
    }

    @Test
    public void testLastPage() {
        String url = "https://198763.xyz/list.php?class=oumei&page=54";
        Element body = jsoupComponent.getBody(url);
        System.out.println();
    }

    @Test
    public void testMgHeader() {
//        Element body = jsoupComponent.getBody("https://198763.xyz/list.php?class=oumei");
//        String href = body.select("#content > div.post.post-last > ul > li:nth-child(2) > a").text();
//        System.out.println(href);
//        Connection connection = jsoupComponent.getJsoupConnection("https://198763.xyz/list.php?class=oumei");
        ChromeDriver chromeDriver = ExploreDriverUtil.getChromeDriver();
        chromeDriver.get("https://906524.xyz/list.php?class=oumei");
        chromeDriver.manage().timeouts().implicitlyWait(1000, TimeUnit.MILLISECONDS);
        WebElement selector = chromeDriver.findElementByCssSelector("div#content > div.post.post-last > ul");
        WebElement elements = Optional.ofNullable(selector).orElseThrow(() -> new BetriceException("body为空！"));
        List<WebElement> webElementList = elements.findElements(By.cssSelector("li > a"));
        for (WebElement webElement : webElementList) {
            System.out.println(webElement.getText());
        }
    }

    @Test
    public void testMgHeader2() {
        String pubDateStr = "【发布时间】：";
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        String url = "https://906524.xyz/html/movie/pc/oumei_1185805611312389.html";
        ChromeDriver chromeDriver = ExploreDriverUtil.getChromeDriver();
        chromeDriver.get(url);
        String pid = pidMatch(url);
        chromeDriver.manage().timeouts().implicitlyWait(100, TimeUnit.MILLISECONDS);
        WebElement content = chromeDriver.findElementByCssSelector("#content");
        String title = content.findElement(By.cssSelector("h2")).getText();
        Date pubDate = Optional.ofNullable(content.findElement(By.cssSelector("p:nth-child(2)")).getText()).map(m -> {
            if (pubDateStr.length() < m.length()) {
                try {
                    return dateFormat.parse(m.substring(pubDateStr.length()));
                } catch (ParseException e) {
                    e.printStackTrace();
                }
            }
            return null;
        }).orElse(null);
        String mvForm = Optional.ofNullable(content.findElement(By.cssSelector("p:nth-child(3)")).getText()).map(m -> {
            if (pubDateStr.length() < m.length()) {
                return m.substring(pubDateStr.length());
            }
            return null;
        }).orElse(null);
        Integer mvSize = Optional.ofNullable(content.findElement(By.cssSelector("p:nth-child(4)")).getText()).map(m -> {
            if (pubDateStr.length() < m.length()) {
                return Integer.valueOf(m.substring(pubDateStr.length()).replace(" MB", ""));
            }
            return null;
        }).orElse(null);
        Integer mvDuration = Optional.ofNullable(content.findElement(By.cssSelector("p:nth-child(5)")).getText()).map(m -> {
            if (pubDateStr.length() < m.length()) {
                return Integer.valueOf(m.substring(pubDateStr.length()).replace("分钟", ""));
            }
            return null;
        }).orElse(null);
        String mvResolution = Optional.ofNullable(content.findElement(By.cssSelector("p:nth-child(6)")).getText()).map(m -> {
            if (pubDateStr.length() - 1 < m.length()) {
                return m.substring(pubDateStr.length() - 1);
            }
            return null;
        }).orElse(null);
        String downloadUrl = content.findElement(By.cssSelector("div.download > b > font > a")).getAttribute("href");
        String magnet = jsoupComponent.getBody(downloadUrl).select("div > p:nth-child(1)").text().substring(5);
        MgDetailPo mgDetailPo = new MgDetailPo();
        mgDetailPo.setPid(pid);
        mgDetailPo.setTitle(title);
        mgDetailPo.setPubDate(pubDate);
        mgDetailPo.setMvForm(mvForm);
        mgDetailPo.setMvSize(mvSize);
        mgDetailPo.setMvDuration(mvDuration);
        mgDetailPo.setMvResolution(mvResolution);
        mgDetailPo.setDetailUrl(url);
        mgDetailPo.setMagnet(magnet);
    }

    public String pidMatch(String url) {
//        String url = "https://906524.xyz/html/movie/pc/oumei_1185805611312389.html";
        String regEx = "(?<=oumei_).*?(?=.html)";
        Pattern pattern = Pattern.compile(regEx);
        //用定义好的正则表达式拆分字符串，把字符串中的数字留出来
        Matcher matcher = pattern.matcher(url);
        String result = null;
        while (matcher.find()) {
            result = matcher.group();
        }
        return result;
    }

    @Test
    public void parseJSON() {
        String json = "{\"code\":0,\"message\":\"0\",\"ttl\":1,\"data\":{\"show_type\":1,\"show_text\":\"按时间\",\"page\":{\"num\":1,\"size\":10,\"count\":197},\"upper\":{\"mid\":523318608},\"replies\":[{\"rpid\":152593968256,\"oid\":224473443,\"type\":1,\"mid\":523318608,\"root\":152589818352,\"parent\":152589818352,\"dialog\":152593968256,\"count\":0,\"rcount\":0,\"state\":0,\"fansgrade\":0,\"attr\":0,\"ctime\":1676547667,\"rpid_str\":\"152593968256\",\"root_str\":\"152589818352\",\"parent_str\":\"152589818352\",\"like\":95,\"action\":0,\"member\":{\"mid\":\"523318608\",\"uname\":\"搞笑孟文明\",\"sex\":\"男\",\"sign\":\"有趣的灵魂万里挑一\\n艺术来源于生活，而高于生活\",\"avatar\":\"https://i0.hdslb.com/bfs/face/722b0df9c753175242cbfd1ed94747eba347b006.jpg\",\"rank\":\"10000\",\"face_nft_new\":0,\"is_senior_member\":0,\"senior\":{},\"level_info\":{\"current_level\":6,\"current_min\":0,\"current_exp\":0,\"next_exp\":0},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0,\"image_enhance\":\"\",\"image_enhance_frame\":\"\"},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":0,\"desc\":\"bilibili 知名搞笑UP主\"},\"vip\":{\"vipType\":2,\"vipDueDate\":1707667200000,\"dueRemark\":\"\",\"accessStatus\":0,\"vipStatus\":1,\"vipStatusWarn\":\"\",\"themeType\":0,\"label\":{\"path\":\"\",\"text\":\"年度大会员\",\"label_theme\":\"annual_vip\",\"text_color\":\"#FFFFFF\",\"bg_style\":1,\"bg_color\":\"#FB7299\",\"border_color\":\"\",\"use_img_label\":true,\"img_label_uri_hans\":\"\",\"img_label_uri_hant\":\"\",\"img_label_uri_hans_static\":\"https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png\",\"img_label_uri_hant_static\":\"https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png\"},\"avatar_subscript\":1,\"nickname_color\":\"#FB7299\"},\"user_sailing\":{},\"is_contractor\":false,\"contract_desc\":\"\",\"avatar_item\":{\"container_size\":{\"width\":1.8,\"height\":1.8},\"fallback_layers\":{\"layers\":[{\"visible\":true,\"general_spec\":{\"pos_spec\":{\"coordinate_pos\":2,\"axis_x\":0.9,\"axis_y\":0.9},\"size_spec\":{\"width\":1,\"height\":1},\"render_spec\":{\"opacity\":1}},\"layer_config\":{\"tags\":{\"AVATAR_LAYER\":{}},\"is_critical\":true,\"layer_mask\":{\"general_spec\":{\"pos_spec\":{\"coordinate_pos\":2,\"axis_x\":0.9,\"axis_y\":0.9},\"size_spec\":{\"width\":1,\"height\":1},\"render_spec\":{\"opacity\":1}},\"mask_src\":{\"src_type\":3,\"draw\":{\"draw_type\":1,\"fill_mode\":1,\"color_config\":{\"day\":{\"argb\":\"#FF000000\"}}}}}},\"resource\":{\"res_type\":3,\"res_image\":{\"image_src\":{\"src_type\":1,\"placeholder\":6,\"remote\":{\"url\":\"https://i0.hdslb.com/bfs/face/722b0df9c753175242cbfd1ed94747eba347b006.jpg\",\"bfs_style\":\"widget-layer-avatar\"}}}}},{\"visible\":true,\"general_spec\":{\"pos_spec\":{\"coordinate_pos\":1,\"axis_x\":1.0333333333333332,\"axis_y\":1.0333333333333332},\"size_spec\":{\"width\":0.39999999999999997,\"height\":0.39999999999999997},\"render_spec\":{\"opacity\":1}},\"layer_config\":{\"tags\":{\"ICON_LAYER\":{}}},\"resource\":{\"res_type\":5,\"res_native_draw\":{\"draw_src\":{\"src_type\":3,\"draw\":{\"draw_type\":1,\"fill_mode\":1,\"color_config\":{\"is_dark_mode_aware\":true,\"day\":{\"argb\":\"#FFFFFFFF\"},\"night\":{\"argb\":\"#FF17181A\"}}}}}}},{\"visible\":true,\"general_spec\":{\"pos_spec\":{\"coordinate_pos\":1,\"axis_x\":1.0666666666666667,\"axis_y\":1.0666666666666667},\"size_spec\":{\"width\":0.3333333333333333,\"height\":0.3333333333333333},\"render_spec\":{\"opacity\":1}},\"layer_config\":{\"tags\":{\"ICON_LAYER\":{}}},\"resource\":{\"res_type\":3,\"res_image\":{\"image_src\":{\"src_type\":2,\"local\":3}}}}],\"is_critical_group\":true},\"mid\":\"523318608\"}},\"content\":{\"message\":\"老板不挣钱企业就倒闭，企业倒闭你也就没工作了[doge]\",\"members\":[],\"emote\":{\"[doge]\":{\"id\":26,\"package_id\":1,\"state\":0,\"type\":1,\"attr\":0,\"text\":\"[doge]\",\"url\":\"https://i0.hdslb.com/bfs/emote/3087d273a78ccaff4bb1e9972e2ba2a7583c9f11.png\",\"meta\":{\"size\":1},\"mtime\":1668688325,\"jump_title\":\"doge\"}},\"jump_url\":{},\"max_line\":6},\"assist\":0,\"up_action\":{\"like\":false,\"reply\":false},\"invisible\":false,\"reply_control\":{\"max_line\":6,\"time_desc\":\"29天前发布\",\"location\":\"IP属地：河北\"},\"folder\":{\"has_folded\":false,\"is_folded\":false,\"rule\":\"\"},\"dynamic_id_str\":\"0\"},{\"rpid\":152595357968,\"oid\":224473443,\"type\":1,\"mid\":240125492,\"root\":152589818352,\"parent\":152593968256,\"dialog\":152593968256,\"count\":0,\"rcount\":0,\"state\":0,\"fansgrade\":0,\"attr\":0,\"ctime\":1676548310,\"rpid_str\":\"152595357968\",\"root_str\":\"152589818352\",\"parent_str\":\"152593968256\",\"like\":24,\"action\":0,\"member\":{\"mid\":\"240125492\",\"uname\":\"快乐书中\",\"sex\":\"保密\",\"sign\":\"\",\"avatar\":\"http://i0.hdslb.com/bfs/face/member/noface.jpg\",\"rank\":\"10000\",\"face_nft_new\":0,\"is_senior_member\":0,\"senior\":{},\"level_info\":{\"current_level\":6,\"current_min\":0,\"current_exp\":0,\"next_exp\":0},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0,\"image_enhance\":\"\",\"image_enhance_frame\":\"\"},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":1,\"vipDueDate\":1616256000000,\"dueRemark\":\"\",\"accessStatus\":0,\"vipStatus\":0,\"vipStatusWarn\":\"\",\"themeType\":0,\"label\":{\"path\":\"\",\"text\":\"\",\"label_theme\":\"\",\"text_color\":\"\",\"bg_style\":0,\"bg_color\":\"\",\"border_color\":\"\",\"use_img_label\":true,\"img_label_uri_hans\":\"\",\"img_label_uri_hant\":\"\",\"img_label_uri_hans_static\":\"https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png\",\"img_label_uri_hant_static\":\"https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png\"},\"avatar_subscript\":0,\"nickname_color\":\"\"},\"user_sailing\":{},\"is_contractor\":false,\"contract_desc\":\"\",\"avatar_item\":{\"container_size\":{\"width\":1.8,\"height\":1.8},\"fallback_layers\":{\"layers\":[{\"visible\":true,\"general_spec\":{\"pos_spec\":{\"coordinate_pos\":2,\"axis_x\":0.9,\"axis_y\":0.9},\"size_spec\":{\"width\":1,\"height\":1},\"render_spec\":{\"opacity\":1}},\"layer_config\":{\"tags\":{\"AVATAR_LAYER\":{}},\"is_critical\":true,\"layer_mask\":{\"general_spec\":{\"pos_spec\":{\"coordinate_pos\":2,\"axis_x\":0.9,\"axis_y\":0.9},\"size_spec\":{\"width\":1,\"height\":1},\"render_spec\":{\"opacity\":1}},\"mask_src\":{\"src_type\":3,\"draw\":{\"draw_type\":1,\"fill_mode\":1,\"color_config\":{\"day\":{\"argb\":\"#FF000000\"}}}}}},\"resource\":{\"res_type\":3,\"res_image\":{\"image_src\":{\"src_type\":1,\"placeholder\":6,\"remote\":{\"url\":\"http://i0.hdslb.com/bfs/face/member/noface.jpg\",\"bfs_style\":\"widget-layer-avatar\"}}}}}],\"is_critical_group\":true},\"mid\":\"240125492\"}},\"content\":{\"message\":\"回复 @搞笑孟文明 :是的[doge]话还可以这么说[doge]\",\"at_name_to_mid\":{\"搞笑孟文明\":523318608},\"members\":[{\"mid\":\"523318608\",\"uname\":\"搞笑孟文明\",\"sex\":\"男\",\"sign\":\"有趣的灵魂万里挑一\\n艺术来源于生活，而高于生活\",\"avatar\":\"https://i0.hdslb.com/bfs/face/722b0df9c753175242cbfd1ed94747eba347b006.jpg\",\"rank\":\"10000\",\"face_nft_new\":0,\"is_senior_member\":0,\"senior\":{},\"level_info\":{\"current_level\":6,\"current_min\":0,\"current_exp\":0,\"next_exp\":0},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0,\"image_enhance\":\"\",\"image_enhance_frame\":\"\"},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":0,\"desc\":\"bilibili 知名搞笑UP主\"},\"vip\":{\"vipType\":2,\"vipDueDate\":1707667200000,\"dueRemark\":\"\",\"accessStatus\":0,\"vipStatus\":1,\"vipStatusWarn\":\"\",\"themeType\":0,\"label\":{\"path\":\"\",\"text\":\"年度大会员\",\"label_theme\":\"annual_vip\",\"text_color\":\"#FFFFFF\",\"bg_style\":1,\"bg_color\":\"#FB7299\",\"border_color\":\"\",\"use_img_label\":true,\"img_label_uri_hans\":\"\",\"img_label_uri_hant\":\"\",\"img_label_uri_hans_static\":\"https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png\",\"img_label_uri_hant_static\":\"https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png\"},\"avatar_subscript\":1,\"nickname_color\":\"#FB7299\"}}],\"emote\":{\"[doge]\":{\"id\":26,\"package_id\":1,\"state\":0,\"type\":1,\"attr\":0,\"text\":\"[doge]\",\"url\":\"https://i0.hdslb.com/bfs/emote/3087d273a78ccaff4bb1e9972e2ba2a7583c9f11.png\",\"meta\":{\"size\":1},\"mtime\":1668688325,\"jump_title\":\"doge\"}},\"jump_url\":{},\"max_line\":6},\"assist\":0,\"up_action\":{\"like\":false,\"reply\":false},\"invisible\":false,\"reply_control\":{\"max_line\":6,\"time_desc\":\"29天前发布\",\"location\":\"IP属地：广东\"},\"folder\":{\"has_folded\":false,\"is_folded\":false,\"rule\":\"\"},\"dynamic_id_str\":\"0\"},{\"rpid\":152596839424,\"oid\":224473443,\"type\":1,\"mid\":1674447464,\"root\":152589818352,\"parent\":152589818352,\"dialog\":152596839424,\"count\":0,\"rcount\":0,\"state\":0,\"fansgrade\":0,\"attr\":0,\"ctime\":1676548855,\"rpid_str\":\"152596839424\",\"root_str\":\"152589818352\",\"parent_str\":\"152589818352\",\"like\":666,\"action\":0,\"member\":{\"mid\":\"1674447464\",\"uname\":\"胖子的三百斤\",\"sex\":\"保密\",\"sign\":\"\",\"avatar\":\"https://i0.hdslb.com/bfs/face/member/noface.jpg\",\"rank\":\"10000\",\"face_nft_new\":0,\"is_senior_member\":0,\"senior\":{},\"level_info\":{\"current_level\":3,\"current_min\":0,\"current_exp\":0,\"next_exp\":0},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0,\"image_enhance\":\"\",\"image_enhance_frame\":\"\"},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":1,\"vipDueDate\":1679328000000,\"dueRemark\":\"\",\"accessStatus\":0,\"vipStatus\":1,\"vipStatusWarn\":\"\",\"themeType\":0,\"label\":{\"path\":\"\",\"text\":\"大会员\",\"label_theme\":\"vip\",\"text_color\":\"#FFFFFF\",\"bg_style\":1,\"bg_color\":\"#FB7299\",\"border_color\":\"\",\"use_img_label\":true,\"img_label_uri_hans\":\"\",\"img_label_uri_hant\":\"\",\"img_label_uri_hans_static\":\"https://i0.hdslb.com/bfs/vip/3788b674c69072f1ee252b79a31ecc8c43af3039.png\",\"img_label_uri_hant_static\":\"https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/jwXBWRVwa5.png\"},\"avatar_subscript\":1,\"nickname_color\":\"\"},\"user_sailing\":{},\"is_contractor\":false,\"contract_desc\":\"\",\"avatar_item\":{\"container_size\":{\"width\":1.8,\"height\":1.8},\"fallback_layers\":{\"layers\":[{\"visible\":true,\"general_spec\":{\"pos_spec\":{\"coordinate_pos\":2,\"axis_x\":0.9,\"axis_y\":0.9},\"size_spec\":{\"width\":1,\"height\":1},\"render_spec\":{\"opacity\":1}},\"layer_config\":{\"tags\":{\"AVATAR_LAYER\":{}},\"is_critical\":true,\"layer_mask\":{\"general_spec\":{\"pos_spec\":{\"coordinate_pos\":2,\"axis_x\":0.9,\"axis_y\":0.9},\"size_spec\":{\"width\":1,\"height\":1},\"render_spec\":{\"opacity\":1}},\"mask_src\":{\"src_type\":3,\"draw\":{\"draw_type\":1,\"fill_mode\":1,\"color_config\":{\"day\":{\"argb\":\"#FF000000\"}}}}}},\"resource\":{\"res_type\":3,\"res_image\":{\"image_src\":{\"src_type\":1,\"placeholder\":6,\"remote\":{\"url\":\"https://i0.hdslb.com/bfs/face/member/noface.jpg\",\"bfs_style\":\"widget-layer-avatar\"}}}}}],\"is_critical_group\":true},\"mid\":\"1674447464\"}},\"content\":{\"message\":\"我总感觉（老板有钱，我才能有钱，）这句话有点不对，就是我心里觉得这句话是谬论，但我想不出来哪里不对？这种老板与员工的关系怎么有点像贵族文化？\",\"members\":[],\"jump_url\":{},\"max_line\":6},\"assist\":0,\"up_action\":{\"like\":false,\"reply\":false},\"invisible\":false,\"reply_control\":{\"max_line\":6,\"time_desc\":\"29天前发布\",\"location\":\"IP属地：广东\"},\"folder\":{\"has_folded\":false,\"is_folded\":false,\"rule\":\"\"},\"dynamic_id_str\":\"0\"},{\"rpid\":152597418720,\"oid\":224473443,\"type\":1,\"mid\":265916726,\"root\":152589818352,\"parent\":152596839424,\"dialog\":152596839424,\"count\":0,\"rcount\":0,\"state\":0,\"fansgrade\":0,\"attr\":0,\"ctime\":1676549105,\"rpid_str\":\"152597418720\",\"root_str\":\"152589818352\",\"parent_str\":\"152596839424\",\"like\":532,\"action\":0,\"member\":{\"mid\":\"265916726\",\"uname\":\"有为之德胜\",\"sex\":\"保密\",\"sign\":\"\",\"avatar\":\"https://i0.hdslb.com/bfs/face/member/noface.jpg\",\"rank\":\"10000\",\"face_nft_new\":0,\"is_senior_member\":0,\"senior\":{},\"level_info\":{\"current_level\":5,\"current_min\":0,\"current_exp\":0,\"next_exp\":0},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0,\"image_enhance\":\"\",\"image_enhance_frame\":\"\"},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":1,\"vipDueDate\":1657900800000,\"dueRemark\":\"\",\"accessStatus\":0,\"vipStatus\":0,\"vipStatusWarn\":\"\",\"themeType\":0,\"label\":{\"path\":\"\",\"text\":\"\",\"label_theme\":\"\",\"text_color\":\"\",\"bg_style\":0,\"bg_color\":\"\",\"border_color\":\"\",\"use_img_label\":true,\"img_label_uri_hans\":\"\",\"img_label_uri_hant\":\"\",\"img_label_uri_hans_static\":\"https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png\",\"img_label_uri_hant_static\":\"https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png\"},\"avatar_subscript\":0,\"nickname_color\":\"\"},\"user_sailing\":{},\"is_contractor\":false,\"contract_desc\":\"\",\"avatar_item\":{\"container_size\":{\"width\":1.8,\"height\":1.8},\"fallback_layers\":{\"layers\":[{\"visible\":true,\"general_spec\":{\"pos_spec\":{\"coordinate_pos\":2,\"axis_x\":0.9,\"axis_y\":0.9},\"size_spec\":{\"width\":1,\"height\":1},\"render_spec\":{\"opacity\":1}},\"layer_config\":{\"tags\":{\"AVATAR_LAYER\":{}},\"is_critical\":true,\"layer_mask\":{\"general_spec\":{\"pos_spec\":{\"coordinate_pos\":2,\"axis_x\":0.9,\"axis_y\":0.9},\"size_spec\":{\"width\":1,\"height\":1},\"render_spec\":{\"opacity\":1}},\"mask_src\":{\"src_type\":3,\"draw\":{\"draw_type\":1,\"fill_mode\":1,\"color_config\":{\"day\":{\"argb\":\"#FF000000\"}}}}}},\"resource\":{\"res_type\":3,\"res_image\":{\"image_src\":{\"src_type\":1,\"placeholder\":6,\"remote\":{\"url\":\"https://i0.hdslb.com/bfs/face/member/noface.jpg\",\"bfs_style\":\"widget-layer-avatar\"}}}}}],\"is_critical_group\":true},\"mid\":\"265916726\"}},\"content\":{\"message\":\"回复 @胖子的三百斤 :本来就不对，生产资料所有制的关系。\",\"at_name_to_mid\":{\"胖子的三百斤\":1674447464},\"members\":[{\"mid\":\"1674447464\",\"uname\":\"胖子的三百斤\",\"sex\":\"保密\",\"sign\":\"\",\"avatar\":\"https://i0.hdslb.com/bfs/face/member/noface.jpg\",\"rank\":\"10000\",\"face_nft_new\":0,\"is_senior_member\":0,\"senior\":{},\"level_info\":{\"current_level\":3,\"current_min\":0,\"current_exp\":0,\"next_exp\":0},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0,\"image_enhance\":\"\",\"image_enhance_frame\":\"\"},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":1,\"vipDueDate\":1679328000000,\"dueRemark\":\"\",\"accessStatus\":0,\"vipStatus\":1,\"vipStatusWarn\":\"\",\"themeType\":0,\"label\":{\"path\":\"\",\"text\":\"大会员\",\"label_theme\":\"vip\",\"text_color\":\"#FFFFFF\",\"bg_style\":1,\"bg_color\":\"#FB7299\",\"border_color\":\"\",\"use_img_label\":true,\"img_label_uri_hans\":\"\",\"img_label_uri_hant\":\"\",\"img_label_uri_hans_static\":\"https://i0.hdslb.com/bfs/vip/3788b674c69072f1ee252b79a31ecc8c43af3039.png\",\"img_label_uri_hant_static\":\"https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/jwXBWRVwa5.png\"},\"avatar_subscript\":1,\"nickname_color\":\"\"}}],\"jump_url\":{},\"max_line\":6},\"assist\":0,\"up_action\":{\"like\":false,\"reply\":false},\"invisible\":false,\"reply_control\":{\"max_line\":6,\"time_desc\":\"29天前发布\",\"location\":\"IP属地：湖南\"},\"folder\":{\"has_folded\":false,\"is_folded\":false,\"rule\":\"\"},\"dynamic_id_str\":\"0\"},{\"rpid\":152601057136,\"oid\":224473443,\"type\":1,\"mid\":395096159,\"root\":152589818352,\"parent\":152596839424,\"dialog\":152596839424,\"count\":0,\"rcount\":0,\"state\":0,\"fansgrade\":0,\"attr\":0,\"ctime\":1676550637,\"rpid_str\":\"152601057136\",\"root_str\":\"152589818352\",\"parent_str\":\"152596839424\",\"like\":326,\"action\":0,\"member\":{\"mid\":\"395096159\",\"uname\":\"意識形態の小憲兵\",\"sex\":\"男\",\"sign\":\"满潮精罗哭泣，再也不见查士丁尼……\",\"avatar\":\"https://i2.hdslb.com/bfs/face/279a2372667ae0dd2ba42487a989a4c1255496ab.jpg\",\"rank\":\"10000\",\"face_nft_new\":0,\"is_senior_member\":0,\"senior\":{},\"level_info\":{\"current_level\":5,\"current_min\":0,\"current_exp\":0,\"next_exp\":0},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0,\"image_enhance\":\"\",\"image_enhance_frame\":\"\"},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":0,\"vipStatus\":0,\"vipStatusWarn\":\"\",\"themeType\":0,\"label\":{\"path\":\"\",\"text\":\"\",\"label_theme\":\"\",\"text_color\":\"\",\"bg_style\":0,\"bg_color\":\"\",\"border_color\":\"\",\"use_img_label\":true,\"img_label_uri_hans\":\"\",\"img_label_uri_hant\":\"\",\"img_label_uri_hans_static\":\"https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png\",\"img_label_uri_hant_static\":\"https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png\"},\"avatar_subscript\":0,\"nickname_color\":\"\"},\"user_sailing\":{},\"is_contractor\":false,\"contract_desc\":\"\",\"avatar_item\":{\"container_size\":{\"width\":1.8,\"height\":1.8},\"fallback_layers\":{\"layers\":[{\"visible\":true,\"general_spec\":{\"pos_spec\":{\"coordinate_pos\":2,\"axis_x\":0.9,\"axis_y\":0.9},\"size_spec\":{\"width\":1,\"height\":1},\"render_spec\":{\"opacity\":1}},\"layer_config\":{\"tags\":{\"AVATAR_LAYER\":{}},\"is_critical\":true,\"layer_mask\":{\"general_spec\":{\"pos_spec\":{\"coordinate_pos\":2,\"axis_x\":0.9,\"axis_y\":0.9},\"size_spec\":{\"width\":1,\"height\":1},\"render_spec\":{\"opacity\":1}},\"mask_src\":{\"src_type\":3,\"draw\":{\"draw_type\":1,\"fill_mode\":1,\"color_config\":{\"day\":{\"argb\":\"#FF000000\"}}}}}},\"resource\":{\"res_type\":3,\"res_image\":{\"image_src\":{\"src_type\":1,\"placeholder\":6,\"remote\":{\"url\":\"https://i2.hdslb.com/bfs/face/279a2372667ae0dd2ba42487a989a4c1255496ab.jpg\",\"bfs_style\":\"widget-layer-avatar\"}}}}}],\"is_critical_group\":true},\"mid\":\"395096159\"}},\"content\":{\"message\":\"回复 @胖子的三百斤 :你真是老实人呀，兄弟，这讽刺带资本家和工贼呢[笑哭]\",\"at_name_to_mid\":{\"胖子的三百斤\":1674447464},\"members\":[{\"mid\":\"1674447464\",\"uname\":\"胖子的三百斤\",\"sex\":\"保密\",\"sign\":\"\",\"avatar\":\"https://i0.hdslb.com/bfs/face/member/noface.jpg\",\"rank\":\"10000\",\"face_nft_new\":0,\"is_senior_member\":0,\"senior\":{},\"level_info\":{\"current_level\":3,\"current_min\":0,\"current_exp\":0,\"next_exp\":0},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0,\"image_enhance\":\"\",\"image_enhance_frame\":\"\"},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":1,\"vipDueDate\":1679328000000,\"dueRemark\":\"\",\"accessStatus\":0,\"vipStatus\":1,\"vipStatusWarn\":\"\",\"themeType\":0,\"label\":{\"path\":\"\",\"text\":\"大会员\",\"label_theme\":\"vip\",\"text_color\":\"#FFFFFF\",\"bg_style\":1,\"bg_color\":\"#FB7299\",\"border_color\":\"\",\"use_img_label\":true,\"img_label_uri_hans\":\"\",\"img_label_uri_hant\":\"\",\"img_label_uri_hans_static\":\"https://i0.hdslb.com/bfs/vip/3788b674c69072f1ee252b79a31ecc8c43af3039.png\",\"img_label_uri_hant_static\":\"https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/jwXBWRVwa5.png\"},\"avatar_subscript\":1,\"nickname_color\":\"\"}}],\"emote\":{\"[笑哭]\":{\"id\":509,\"package_id\":1,\"state\":0,\"type\":1,\"attr\":0,\"text\":\"[笑哭]\",\"url\":\"https://i0.hdslb.com/bfs/emote/c3043ba94babf824dea03ce500d0e73763bf4f40.png\",\"meta\":{\"size\":1},\"mtime\":1668688325,\"jump_title\":\"笑哭\"}},\"jump_url\":{},\"max_line\":6},\"assist\":0,\"up_action\":{\"like\":false,\"reply\":false},\"invisible\":false,\"reply_control\":{\"max_line\":6,\"time_desc\":\"29天前发布\",\"location\":\"IP属地：河北\"},\"folder\":{\"has_folded\":false,\"is_folded\":false,\"rule\":\"\"},\"dynamic_id_str\":\"0\"},{\"rpid\":152604966272,\"oid\":224473443,\"type\":1,\"mid\":2557107,\"root\":152589818352,\"parent\":152593968256,\"dialog\":152593968256,\"count\":0,\"rcount\":0,\"state\":0,\"fansgrade\":0,\"attr\":0,\"ctime\":1676552330,\"rpid_str\":\"152604966272\",\"root_str\":\"152589818352\",\"parent_str\":\"152593968256\",\"like\":27,\"action\":0,\"member\":{\"mid\":\"2557107\",\"uname\":\"孤独de夜\",\"sex\":\"保密\",\"sign\":\"\",\"avatar\":\"https://i0.hdslb.com/bfs/face/5c80dac17f2e65d2de9b9346a43849a8f4be49ba.jpg\",\"rank\":\"10000\",\"face_nft_new\":0,\"is_senior_member\":1,\"senior\":{\"status\":2},\"level_info\":{\"current_level\":6,\"current_min\":0,\"current_exp\":0,\"next_exp\":0},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0,\"image_enhance\":\"\",\"image_enhance_frame\":\"\"},\"nameplate\":{\"nid\":74,\"name\":\"大会员2018年度勋章\",\"image\":\"https://i0.hdslb.com/bfs/face/421179426c929dfeaed4117461c83f5d07ffb148.png\",\"image_small\":\"https://i0.hdslb.com/bfs/face/682001c2e1c2ae887bdf2a0e18eef61180c48f84.png\",\"level\":\"稀有勋章\",\"condition\":\"2018.6.26-7.8某一天是年度大会员\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":2,\"vipDueDate\":1698336000000,\"dueRemark\":\"\",\"accessStatus\":0,\"vipStatus\":1,\"vipStatusWarn\":\"\",\"themeType\":0,\"label\":{\"path\":\"\",\"text\":\"年度大会员\",\"label_theme\":\"annual_vip\",\"text_color\":\"#FFFFFF\",\"bg_style\":1,\"bg_color\":\"#FB7299\",\"border_color\":\"\",\"use_img_label\":true,\"img_label_uri_hans\":\"\",\"img_label_uri_hant\":\"\",\"img_label_uri_hans_static\":\"https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png\",\"img_label_uri_hant_static\":\"https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png\"},\"avatar_subscript\":1,\"nickname_color\":\"#FB7299\"},\"user_sailing\":{},\"is_contractor\":false,\"contract_desc\":\"\",\"avatar_item\":{\"container_size\":{\"width\":1.8,\"height\":1.8},\"fallback_layers\":{\"layers\":[{\"visible\":true,\"general_spec\":{\"pos_spec\":{\"coordinate_pos\":2,\"axis_x\":0.9,\"axis_y\":0.9},\"size_spec\":{\"width\":1,\"height\":1},\"render_spec\":{\"opacity\":1}},\"layer_config\":{\"tags\":{\"AVATAR_LAYER\":{}},\"is_critical\":true,\"layer_mask\":{\"general_spec\":{\"pos_spec\":{\"coordinate_pos\":2,\"axis_x\":0.9,\"axis_y\":0.9},\"size_spec\":{\"width\":1,\"height\":1},\"render_spec\":{\"opacity\":1}},\"mask_src\":{\"src_type\":3,\"draw\":{\"draw_type\":1,\"fill_mode\":1,\"color_config\":{\"day\":{\"argb\":\"#FF000000\"}}}}}},\"resource\":{\"res_type\":3,\"res_image\":{\"image_src\":{\"src_type\":1,\"placeholder\":6,\"remote\":{\"url\":\"https://i0.hdslb.com/bfs/face/5c80dac17f2e65d2de9b9346a43849a8f4be49ba.jpg\",\"bfs_style\":\"widget-layer-avatar\"}}}}}],\"is_critical_group\":true},\"mid\":\"2557107\"}},\"content\":{\"message\":\"回复 @搞笑孟文明 : 很扎心 但是是事实\",\"at_name_to_mid\":{\"搞笑孟文明\":523318608},\"members\":[{\"mid\":\"523318608\",\"uname\":\"搞笑孟文明\",\"sex\":\"男\",\"sign\":\"有趣的灵魂万里挑一\\n艺术来源于生活，而高于生活\",\"avatar\":\"https://i0.hdslb.com/bfs/face/722b0df9c753175242cbfd1ed94747eba347b006.jpg\",\"rank\":\"10000\",\"face_nft_new\":0,\"is_senior_member\":0,\"senior\":{},\"level_info\":{\"current_level\":6,\"current_min\":0,\"current_exp\":0,\"next_exp\":0},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0,\"image_enhance\":\"\",\"image_enhance_frame\":\"\"},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":0,\"desc\":\"bilibili 知名搞笑UP主\"},\"vip\":{\"vipType\":2,\"vipDueDate\":1707667200000,\"dueRemark\":\"\",\"accessStatus\":0,\"vipStatus\":1,\"vipStatusWarn\":\"\",\"themeType\":0,\"label\":{\"path\":\"\",\"text\":\"年度大会员\",\"label_theme\":\"annual_vip\",\"text_color\":\"#FFFFFF\",\"bg_style\":1,\"bg_color\":\"#FB7299\",\"border_color\":\"\",\"use_img_label\":true,\"img_label_uri_hans\":\"\",\"img_label_uri_hant\":\"\",\"img_label_uri_hans_static\":\"https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png\",\"img_label_uri_hant_static\":\"https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png\"},\"avatar_subscript\":1,\"nickname_color\":\"#FB7299\"}}],\"jump_url\":{},\"max_line\":6},\"assist\":0,\"up_action\":{\"like\":false,\"reply\":false},\"invisible\":false,\"reply_control\":{\"max_line\":6,\"time_desc\":\"29天前发布\",\"location\":\"IP属地：浙江\"},\"folder\":{\"has_folded\":false,\"is_folded\":false,\"rule\":\"\"},\"dynamic_id_str\":\"0\"},{\"rpid\":152619177312,\"oid\":224473443,\"type\":1,\"mid\":14464253,\"root\":152589818352,\"parent\":152593968256,\"dialog\":152593968256,\"count\":0,\"rcount\":0,\"state\":0,\"fansgrade\":0,\"attr\":0,\"ctime\":1676558001,\"rpid_str\":\"152619177312\",\"root_str\":\"152589818352\",\"parent_str\":\"152593968256\",\"like\":245,\"action\":0,\"member\":{\"mid\":\"14464253\",\"uname\":\"RUDY追梦赤子心\",\"sex\":\"保密\",\"sign\":\"\",\"avatar\":\"https://i2.hdslb.com/bfs/face/40a1303c9c48c9ad2e720ffcbfad5455cd6ef4f6.jpg\",\"rank\":\"10000\",\"face_nft_new\":0,\"is_senior_member\":0,\"senior\":{},\"level_info\":{\"current_level\":5,\"current_min\":0,\"current_exp\":0,\"next_exp\":0},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0,\"image_enhance\":\"\",\"image_enhance_frame\":\"\"},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":2,\"vipDueDate\":1682352000000,\"dueRemark\":\"\",\"accessStatus\":0,\"vipStatus\":1,\"vipStatusWarn\":\"\",\"themeType\":0,\"label\":{\"path\":\"\",\"text\":\"年度大会员\",\"label_theme\":\"annual_vip\",\"text_color\":\"#FFFFFF\",\"bg_style\":1,\"bg_color\":\"#FB7299\",\"border_color\":\"\",\"use_img_label\":true,\"img_label_uri_hans\":\"\",\"img_label_uri_hant\":\"\",\"img_label_uri_hans_static\":\"https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png\",\"img_label_uri_hant_static\":\"https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png\"},\"avatar_subscript\":1,\"nickname_color\":\"#FB7299\"},\"user_sailing\":{},\"is_contractor\":false,\"contract_desc\":\"\",\"avatar_item\":{\"container_size\":{\"width\":1.8,\"height\":1.8},\"fallback_layers\":{\"layers\":[{\"visible\":true,\"general_spec\":{\"pos_spec\":{\"coordinate_pos\":2,\"axis_x\":0.9,\"axis_y\":0.9},\"size_spec\":{\"width\":1,\"height\":1},\"render_spec\":{\"opacity\":1}},\"layer_config\":{\"tags\":{\"AVATAR_LAYER\":{}},\"is_critical\":true,\"layer_mask\":{\"general_spec\":{\"pos_spec\":{\"coordinate_pos\":2,\"axis_x\":0.9,\"axis_y\":0.9},\"size_spec\":{\"width\":1,\"height\":1},\"render_spec\":{\"opacity\":1}},\"mask_src\":{\"src_type\":3,\"draw\":{\"draw_type\":1,\"fill_mode\":1,\"color_config\":{\"day\":{\"argb\":\"#FF000000\"}}}}}},\"resource\":{\"res_type\":3,\"res_image\":{\"image_src\":{\"src_type\":1,\"placeholder\":6,\"remote\":{\"url\":\"https://i2.hdslb.com/bfs/face/40a1303c9c48c9ad2e720ffcbfad5455cd6ef4f6.jpg\",\"bfs_style\":\"widget-layer-avatar\"}}}}}],\"is_critical_group\":true},\"mid\":\"14464253\"}},\"content\":{\"message\":\"回复 @搞笑孟文明 :本质是老板会把风险转嫁给员工，赚钱老板拿，亏钱员工承担\",\"at_name_to_mid\":{\"搞笑孟文明\":523318608},\"members\":[{\"mid\":\"523318608\",\"uname\":\"搞笑孟文明\",\"sex\":\"男\",\"sign\":\"有趣的灵魂万里挑一\\n艺术来源于生活，而高于生活\",\"avatar\":\"https://i0.hdslb.com/bfs/face/722b0df9c753175242cbfd1ed94747eba347b006.jpg\",\"rank\":\"10000\",\"face_nft_new\":0,\"is_senior_member\":0,\"senior\":{},\"level_info\":{\"current_level\":6,\"current_min\":0,\"current_exp\":0,\"next_exp\":0},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0,\"image_enhance\":\"\",\"image_enhance_frame\":\"\"},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":0,\"desc\":\"bilibili 知名搞笑UP主\"},\"vip\":{\"vipType\":2,\"vipDueDate\":1707667200000,\"dueRemark\":\"\",\"accessStatus\":0,\"vipStatus\":1,\"vipStatusWarn\":\"\",\"themeType\":0,\"label\":{\"path\":\"\",\"text\":\"年度大会员\",\"label_theme\":\"annual_vip\",\"text_color\":\"#FFFFFF\",\"bg_style\":1,\"bg_color\":\"#FB7299\",\"border_color\":\"\",\"use_img_label\":true,\"img_label_uri_hans\":\"\",\"img_label_uri_hant\":\"\",\"img_label_uri_hans_static\":\"https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png\",\"img_label_uri_hant_static\":\"https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png\"},\"avatar_subscript\":1,\"nickname_color\":\"#FB7299\"}}],\"jump_url\":{},\"max_line\":6},\"assist\":0,\"up_action\":{\"like\":false,\"reply\":false},\"invisible\":false,\"reply_control\":{\"max_line\":6,\"time_desc\":\"29天前发布\",\"location\":\"IP属地：上海\"},\"folder\":{\"has_folded\":false,\"is_folded\":false,\"rule\":\"\"},\"dynamic_id_str\":\"0\"},{\"rpid\":152619946000,\"oid\":224473443,\"type\":1,\"mid\":494162657,\"root\":152589818352,\"parent\":152593968256,\"dialog\":152593968256,\"count\":0,\"rcount\":0,\"state\":0,\"fansgrade\":0,\"attr\":0,\"ctime\":1676558240,\"rpid_str\":\"152619946000\",\"root_str\":\"152589818352\",\"parent_str\":\"152593968256\",\"like\":57,\"action\":0,\"member\":{\"mid\":\"494162657\",\"uname\":\"木有老冻发的地方\",\"sex\":\"保密\",\"sign\":\"\",\"avatar\":\"https://i2.hdslb.com/bfs/face/e218953f7bfab86224e5b7605739ff100d7acfb8.jpg\",\"rank\":\"10000\",\"face_nft_new\":0,\"is_senior_member\":0,\"senior\":{},\"level_info\":{\"current_level\":5,\"current_min\":0,\"current_exp\":0,\"next_exp\":0},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0,\"image_enhance\":\"\",\"image_enhance_frame\":\"\"},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":2,\"vipDueDate\":1693411200000,\"dueRemark\":\"\",\"accessStatus\":0,\"vipStatus\":1,\"vipStatusWarn\":\"\",\"themeType\":0,\"label\":{\"path\":\"\",\"text\":\"年度大会员\",\"label_theme\":\"annual_vip\",\"text_color\":\"#FFFFFF\",\"bg_style\":1,\"bg_color\":\"#FB7299\",\"border_color\":\"\",\"use_img_label\":true,\"img_label_uri_hans\":\"\",\"img_label_uri_hant\":\"\",\"img_label_uri_hans_static\":\"https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png\",\"img_label_uri_hant_static\":\"https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png\"},\"avatar_subscript\":1,\"nickname_color\":\"#FB7299\"},\"user_sailing\":{},\"is_contractor\":false,\"contract_desc\":\"\",\"avatar_item\":{\"container_size\":{\"width\":1.8,\"height\":1.8},\"fallback_layers\":{\"layers\":[{\"visible\":true,\"general_spec\":{\"pos_spec\":{\"coordinate_pos\":2,\"axis_x\":0.9,\"axis_y\":0.9},\"size_spec\":{\"width\":1,\"height\":1},\"render_spec\":{\"opacity\":1}},\"layer_config\":{\"tags\":{\"AVATAR_LAYER\":{}},\"is_critical\":true,\"layer_mask\":{\"general_spec\":{\"pos_spec\":{\"coordinate_pos\":2,\"axis_x\":0.9,\"axis_y\":0.9},\"size_spec\":{\"width\":1,\"height\":1},\"render_spec\":{\"opacity\":1}},\"mask_src\":{\"src_type\":3,\"draw\":{\"draw_type\":1,\"fill_mode\":1,\"color_config\":{\"day\":{\"argb\":\"#FF000000\"}}}}}},\"resource\":{\"res_type\":3,\"res_image\":{\"image_src\":{\"src_type\":1,\"placeholder\":6,\"remote\":{\"url\":\"https://i2.hdslb.com/bfs/face/e218953f7bfab86224e5b7605739ff100d7acfb8.jpg\",\"bfs_style\":\"widget-layer-avatar\"}}}}}],\"is_critical_group\":true},\"mid\":\"494162657\"}},\"content\":{\"message\":\"回复 @搞笑孟文明 :没工作挺好，我倒是希望都倒闭，这样就不需要理由就能在家躺着了[藏狐]\",\"at_name_to_mid\":{\"搞笑孟文明\":523318608},\"members\":[{\"mid\":\"523318608\",\"uname\":\"搞笑孟文明\",\"sex\":\"男\",\"sign\":\"有趣的灵魂万里挑一\\n艺术来源于生活，而高于生活\",\"avatar\":\"https://i0.hdslb.com/bfs/face/722b0df9c753175242cbfd1ed94747eba347b006.jpg\",\"rank\":\"10000\",\"face_nft_new\":0,\"is_senior_member\":0,\"senior\":{},\"level_info\":{\"current_level\":6,\"current_min\":0,\"current_exp\":0,\"next_exp\":0},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0,\"image_enhance\":\"\",\"image_enhance_frame\":\"\"},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":0,\"desc\":\"bilibili 知名搞笑UP主\"},\"vip\":{\"vipType\":2,\"vipDueDate\":1707667200000,\"dueRemark\":\"\",\"accessStatus\":0,\"vipStatus\":1,\"vipStatusWarn\":\"\",\"themeType\":0,\"label\":{\"path\":\"\",\"text\":\"年度大会员\",\"label_theme\":\"annual_vip\",\"text_color\":\"#FFFFFF\",\"bg_style\":1,\"bg_color\":\"#FB7299\",\"border_color\":\"\",\"use_img_label\":true,\"img_label_uri_hans\":\"\",\"img_label_uri_hant\":\"\",\"img_label_uri_hans_static\":\"https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png\",\"img_label_uri_hant_static\":\"https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png\"},\"avatar_subscript\":1,\"nickname_color\":\"#FB7299\"}}],\"emote\":{\"[藏狐]\":{\"id\":4000,\"package_id\":1,\"state\":0,\"type\":1,\"attr\":0,\"text\":\"[藏狐]\",\"url\":\"https://i0.hdslb.com/bfs/emote/ba0937ef6f3ccca85e2e0047e6263f3b4da37201.png\",\"meta\":{\"size\":1},\"mtime\":1668688325,\"jump_title\":\"藏狐\"}},\"jump_url\":{},\"max_line\":6},\"assist\":0,\"up_action\":{\"like\":false,\"reply\":false},\"invisible\":false,\"reply_control\":{\"max_line\":6,\"time_desc\":\"29天前发布\",\"location\":\"IP属地：山东\"},\"folder\":{\"has_folded\":false,\"is_folded\":false,\"rule\":\"\"},\"dynamic_id_str\":\"0\"},{\"rpid\":152623728592,\"oid\":224473443,\"type\":1,\"mid\":96908865,\"root\":152589818352,\"parent\":152593968256,\"dialog\":152593968256,\"count\":0,\"rcount\":0,\"state\":0,\"fansgrade\":0,\"attr\":0,\"ctime\":1676559717,\"rpid_str\":\"152623728592\",\"root_str\":\"152589818352\",\"parent_str\":\"152593968256\",\"like\":46,\"action\":0,\"member\":{\"mid\":\"96908865\",\"uname\":\"阳光魅丽\",\"sex\":\"保密\",\"sign\":\"\",\"avatar\":\"http://i0.hdslb.com/bfs/face/member/noface.jpg\",\"rank\":\"10000\",\"face_nft_new\":0,\"is_senior_member\":0,\"senior\":{},\"level_info\":{\"current_level\":6,\"current_min\":0,\"current_exp\":0,\"next_exp\":0},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0,\"image_enhance\":\"\",\"image_enhance_frame\":\"\"},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":0,\"vipDueDate\":0,\"dueRemark\":\"\",\"accessStatus\":0,\"vipStatus\":0,\"vipStatusWarn\":\"\",\"themeType\":0,\"label\":{\"path\":\"\",\"text\":\"\",\"label_theme\":\"\",\"text_color\":\"\",\"bg_style\":0,\"bg_color\":\"\",\"border_color\":\"\",\"use_img_label\":true,\"img_label_uri_hans\":\"\",\"img_label_uri_hant\":\"\",\"img_label_uri_hans_static\":\"https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png\",\"img_label_uri_hant_static\":\"https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png\"},\"avatar_subscript\":0,\"nickname_color\":\"\"},\"user_sailing\":{},\"is_contractor\":false,\"contract_desc\":\"\",\"avatar_item\":{\"container_size\":{\"width\":1.8,\"height\":1.8},\"fallback_layers\":{\"layers\":[{\"visible\":true,\"general_spec\":{\"pos_spec\":{\"coordinate_pos\":2,\"axis_x\":0.9,\"axis_y\":0.9},\"size_spec\":{\"width\":1,\"height\":1},\"render_spec\":{\"opacity\":1}},\"layer_config\":{\"tags\":{\"AVATAR_LAYER\":{}},\"is_critical\":true,\"layer_mask\":{\"general_spec\":{\"pos_spec\":{\"coordinate_pos\":2,\"axis_x\":0.9,\"axis_y\":0.9},\"size_spec\":{\"width\":1,\"height\":1},\"render_spec\":{\"opacity\":1}},\"mask_src\":{\"src_type\":3,\"draw\":{\"draw_type\":1,\"fill_mode\":1,\"color_config\":{\"day\":{\"argb\":\"#FF000000\"}}}}}},\"resource\":{\"res_type\":3,\"res_image\":{\"image_src\":{\"src_type\":1,\"placeholder\":6,\"remote\":{\"url\":\"http://i0.hdslb.com/bfs/face/member/noface.jpg\",\"bfs_style\":\"widget-layer-avatar\"}}}}}],\"is_critical_group\":true},\"mid\":\"96908865\"}},\"content\":{\"message\":\"回复 @搞笑孟文明 :有工作是一回事，有工作低工资绝对不涨又是另外一回事！老板赚多了少分你是基本的事！\",\"at_name_to_mid\":{\"搞笑孟文明\":523318608},\"members\":[{\"mid\":\"523318608\",\"uname\":\"搞笑孟文明\",\"sex\":\"男\",\"sign\":\"有趣的灵魂万里挑一\\n艺术来源于生活，而高于生活\",\"avatar\":\"https://i0.hdslb.com/bfs/face/722b0df9c753175242cbfd1ed94747eba347b006.jpg\",\"rank\":\"10000\",\"face_nft_new\":0,\"is_senior_member\":0,\"senior\":{},\"level_info\":{\"current_level\":6,\"current_min\":0,\"current_exp\":0,\"next_exp\":0},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0,\"image_enhance\":\"\",\"image_enhance_frame\":\"\"},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":0,\"desc\":\"bilibili 知名搞笑UP主\"},\"vip\":{\"vipType\":2,\"vipDueDate\":1707667200000,\"dueRemark\":\"\",\"accessStatus\":0,\"vipStatus\":1,\"vipStatusWarn\":\"\",\"themeType\":0,\"label\":{\"path\":\"\",\"text\":\"年度大会员\",\"label_theme\":\"annual_vip\",\"text_color\":\"#FFFFFF\",\"bg_style\":1,\"bg_color\":\"#FB7299\",\"border_color\":\"\",\"use_img_label\":true,\"img_label_uri_hans\":\"\",\"img_label_uri_hant\":\"\",\"img_label_uri_hans_static\":\"https://i0.hdslb.com/bfs/vip/8d4f8bfc713826a5412a0a27eaaac4d6b9ede1d9.png\",\"img_label_uri_hant_static\":\"https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/VEW8fCC0hg.png\"},\"avatar_subscript\":1,\"nickname_color\":\"#FB7299\"}}],\"jump_url\":{},\"max_line\":6},\"assist\":0,\"up_action\":{\"like\":false,\"reply\":false},\"invisible\":false,\"reply_control\":{\"max_line\":6,\"time_desc\":\"29天前发布\",\"location\":\"IP属地：广西\"},\"folder\":{\"has_folded\":false,\"is_folded\":false,\"rule\":\"\"},\"dynamic_id_str\":\"0\"},{\"rpid\":152627527232,\"oid\":224473443,\"type\":1,\"mid\":12486859,\"root\":152589818352,\"parent\":152589818352,\"dialog\":152627527232,\"count\":0,\"rcount\":0,\"state\":0,\"fansgrade\":0,\"attr\":0,\"ctime\":1676561172,\"rpid_str\":\"152627527232\",\"root_str\":\"152589818352\",\"parent_str\":\"152589818352\",\"like\":33,\"action\":0,\"member\":{\"mid\":\"12486859\",\"uname\":\"左手指天黯月明\",\"sex\":\"保密\",\"sign\":\"\",\"avatar\":\"http://i1.hdslb.com/bfs/face/708a01a6848eee942fb26ec6193463267ca9dbe8.jpg\",\"rank\":\"10000\",\"face_nft_new\":0,\"is_senior_member\":0,\"senior\":{},\"level_info\":{\"current_level\":6,\"current_min\":0,\"current_exp\":0,\"next_exp\":0},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0,\"image_enhance\":\"\",\"image_enhance_frame\":\"\"},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":1,\"vipDueDate\":1626451200000,\"dueRemark\":\"\",\"accessStatus\":0,\"vipStatus\":0,\"vipStatusWarn\":\"\",\"themeType\":0,\"label\":{\"path\":\"\",\"text\":\"\",\"label_theme\":\"\",\"text_color\":\"\",\"bg_style\":0,\"bg_color\":\"\",\"border_color\":\"\",\"use_img_label\":true,\"img_label_uri_hans\":\"\",\"img_label_uri_hant\":\"\",\"img_label_uri_hans_static\":\"https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png\",\"img_label_uri_hant_static\":\"https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png\"},\"avatar_subscript\":0,\"nickname_color\":\"\"},\"user_sailing\":{},\"is_contractor\":false,\"contract_desc\":\"\",\"avatar_item\":{\"container_size\":{\"width\":1.8,\"height\":1.8},\"fallback_layers\":{\"layers\":[{\"visible\":true,\"general_spec\":{\"pos_spec\":{\"coordinate_pos\":2,\"axis_x\":0.9,\"axis_y\":0.9},\"size_spec\":{\"width\":1,\"height\":1},\"render_spec\":{\"opacity\":1}},\"layer_config\":{\"tags\":{\"AVATAR_LAYER\":{}},\"is_critical\":true,\"layer_mask\":{\"general_spec\":{\"pos_spec\":{\"coordinate_pos\":2,\"axis_x\":0.9,\"axis_y\":0.9},\"size_spec\":{\"width\":1,\"height\":1},\"render_spec\":{\"opacity\":1}},\"mask_src\":{\"src_type\":3,\"draw\":{\"draw_type\":1,\"fill_mode\":1,\"color_config\":{\"day\":{\"argb\":\"#FF000000\"}}}}}},\"resource\":{\"res_type\":3,\"res_image\":{\"image_src\":{\"src_type\":1,\"placeholder\":6,\"remote\":{\"url\":\"http://i1.hdslb.com/bfs/face/708a01a6848eee942fb26ec6193463267ca9dbe8.jpg\",\"bfs_style\":\"widget-layer-avatar\"}}}}}],\"is_critical_group\":true},\"mid\":\"12486859\"}},\"content\":{\"message\":\"我们买得起，老板们造的东西才能卖出去\",\"members\":[],\"jump_url\":{},\"max_line\":6},\"assist\":0,\"up_action\":{\"like\":false,\"reply\":false},\"invisible\":false,\"reply_control\":{\"max_line\":6,\"time_desc\":\"29天前发布\",\"location\":\"IP属地：天津\"},\"folder\":{\"has_folded\":false,\"is_folded\":false,\"rule\":\"\"},\"dynamic_id_str\":\"0\"}],\"root\":{\"rpid\":152589818352,\"oid\":224473443,\"type\":1,\"mid\":240125492,\"root\":0,\"parent\":0,\"dialog\":0,\"count\":441,\"rcount\":197,\"state\":0,\"fansgrade\":0,\"attr\":768,\"ctime\":1676545894,\"rpid_str\":\"152589818352\",\"root_str\":\"0\",\"parent_str\":\"0\",\"like\":22775,\"action\":0,\"member\":{\"mid\":\"240125492\",\"uname\":\"快乐书中\",\"sex\":\"保密\",\"sign\":\"\",\"avatar\":\"http://i0.hdslb.com/bfs/face/member/noface.jpg\",\"rank\":\"10000\",\"face_nft_new\":0,\"is_senior_member\":0,\"senior\":{},\"level_info\":{\"current_level\":6,\"current_min\":0,\"current_exp\":0,\"next_exp\":0},\"pendant\":{\"pid\":0,\"name\":\"\",\"image\":\"\",\"expire\":0,\"image_enhance\":\"\",\"image_enhance_frame\":\"\"},\"nameplate\":{\"nid\":0,\"name\":\"\",\"image\":\"\",\"image_small\":\"\",\"level\":\"\",\"condition\":\"\"},\"official_verify\":{\"type\":-1,\"desc\":\"\"},\"vip\":{\"vipType\":1,\"vipDueDate\":1616256000000,\"dueRemark\":\"\",\"accessStatus\":0,\"vipStatus\":0,\"vipStatusWarn\":\"\",\"themeType\":0,\"label\":{\"path\":\"\",\"text\":\"\",\"label_theme\":\"\",\"text_color\":\"\",\"bg_style\":0,\"bg_color\":\"\",\"border_color\":\"\",\"use_img_label\":true,\"img_label_uri_hans\":\"\",\"img_label_uri_hant\":\"\",\"img_label_uri_hans_static\":\"https://i0.hdslb.com/bfs/vip/d7b702ef65a976b20ed854cbd04cb9e27341bb79.png\",\"img_label_uri_hant_static\":\"https://i0.hdslb.com/bfs/activity-plat/static/20220614/e369244d0b14644f5e1a06431e22a4d5/KJunwh19T5.png\"},\"avatar_subscript\":0,\"nickname_color\":\"\"},\"user_sailing\":{},\"is_contractor\":false,\"contract_desc\":\"\",\"avatar_item\":{\"container_size\":{\"width\":1.8,\"height\":1.8},\"fallback_layers\":{\"layers\":[{\"visible\":true,\"general_spec\":{\"pos_spec\":{\"coordinate_pos\":2,\"axis_x\":0.9,\"axis_y\":0.9},\"size_spec\":{\"width\":1,\"height\":1},\"render_spec\":{\"opacity\":1}},\"layer_config\":{\"tags\":{\"AVATAR_LAYER\":{}},\"is_critical\":true,\"layer_mask\":{\"general_spec\":{\"pos_spec\":{\"coordinate_pos\":2,\"axis_x\":0.9,\"axis_y\":0.9},\"size_spec\":{\"width\":1,\"height\":1},\"render_spec\":{\"opacity\":1}},\"mask_src\":{\"src_type\":3,\"draw\":{\"draw_type\":1,\"fill_mode\":1,\"color_config\":{\"day\":{\"argb\":\"#FF000000\"}}}}}},\"resource\":{\"res_type\":3,\"res_image\":{\"image_src\":{\"src_type\":1,\"placeholder\":6,\"remote\":{\"url\":\"http://i0.hdslb.com/bfs/face/member/noface.jpg\",\"bfs_style\":\"widget-layer-avatar\"}}}}}],\"is_critical_group\":true},\"mid\":\"240125492\"}},\"content\":{\"message\":\"打工仔勤劳老板就能致富[doge]\",\"members\":[],\"emote\":{\"[doge]\":{\"id\":26,\"package_id\":1,\"state\":0,\"type\":1,\"attr\":0,\"text\":\"[doge]\",\"url\":\"https://i0.hdslb.com/bfs/emote/3087d273a78ccaff4bb1e9972e2ba2a7583c9f11.png\",\"meta\":{\"size\":1},\"mtime\":1668688325,\"jump_title\":\"doge\"}},\"jump_url\":{},\"max_line\":6},\"assist\":0,\"up_action\":{\"like\":true,\"reply\":true},\"invisible\":false,\"card_label\":[{\"rpid\":152589818352,\"text_content\":\"UP主觉得很赞\",\"text_color_day\":\"#757575\",\"text_color_night\":\"#939393\",\"label_color_day\":\"#F4F4F4\",\"label_color_night\":\"#1E1E1E\",\"image\":\"\",\"type\":0,\"background\":\"\",\"background_width\":0,\"background_height\":0,\"jump_url\":\"\",\"effect\":0,\"effect_start_time\":0}],\"reply_control\":{\"up_like\":true,\"up_reply\":true,\"max_line\":6,\"sub_reply_entry_text\":\"共197条回复\",\"sub_reply_title_text\":\"相关回复共197条\",\"time_desc\":\"29天前发布\",\"location\":\"IP属地：广东\"},\"folder\":{\"has_folded\":false,\"is_folded\":false,\"rule\":\"\"},\"dynamic_id_str\":\"0\"},\"config\":{\"showtopic\":0,\"show_up_flag\":false,\"read_only\":false},\"control\":{\"input_disable\":false,\"root_input_text\":\"发一条友善的评论\",\"child_input_text\":\"\",\"giveup_input_text\":\"不发没关系，请继续友善哦~\",\"screenshot_icon_state\":3,\"upload_picture_icon_state\":3,\"answer_guide_text\":\"需要升级成为lv2会员后才可以评论，先去答题转正吧！\",\"answer_guide_icon_url\":\"http://i0.hdslb.com/bfs/emote/96940d16602cacbbac796245b7bb99fa9b5c970c.png\",\"answer_guide_ios_url\":\"https://www.bilibili.com/h5/newbie/entry?navhide=1&re_src=12\",\"answer_guide_android_url\":\"https://www.bilibili.com/h5/newbie/entry?navhide=1&re_src=6\",\"bg_text\":\"\",\"show_type\":1,\"show_text\":\"\",\"web_selection\":false,\"disable_jump_emote\":false}}}";
        JSONObject jsonObject = JSONObject.parseObject(json);
        JSONObject data = jsonObject.getJSONObject("data");
        JSONArray replies = data.getJSONArray("replies");
        List<BilibiliReviewVo> replyVoList = replies.toJavaList(BilibiliReviewVo.class);
        replyVoList.forEach(System.out::println);
        List<BilibiliReviewDto> bilibiliReviewDtoList = this.bilibiliReviewVo2DtoList(replyVoList);
        List<BilibiliMemberDto> bilibiliMemberDtoList = this.bilibiliMemberVo2DtoList(replyVoList);
        bilibiliReviewService.distinctSaveReviewByRpid(bilibiliReviewDtoList);
        List<BilibiliMemberDto> distinctMemberDtoList = bilibiliMemberDtoList.stream()
                .filter(UCopy.distinctByKey(BilibiliMemberDto::getMid)).toList();
        bilibiliMemberService.distinctSaveMemberByMid(distinctMemberDtoList);
    }

    private List<BilibiliMemberDto> bilibiliMemberVo2DtoList(List<BilibiliReviewVo> bilibiliReviewVoList) {
        List<BilibiliMemberDto> bilibiliMemberDtoList = new ArrayList<>();
        for (BilibiliReviewVo bilibiliReviewVo : bilibiliReviewVoList) {
            BilibiliMemberDto bilibiliMemberDto = new BilibiliMemberDto();
            BilibiliMemberVo bilibiliMemberVo = bilibiliReviewVo.getBilibiliMemberVo();
            bilibiliMemberDto.setMid(bilibiliMemberVo.getMid());
            bilibiliMemberDto.setName(bilibiliMemberVo.getName());
            bilibiliMemberDto.setSex(bilibiliMemberVo.getSex());
            bilibiliMemberDto.setSign(bilibiliMemberVo.getSign());
            bilibiliMemberDto.setLevel(bilibiliMemberVo.getBilibiliMemberLevelVo().getLevel());
            bilibiliMemberDtoList.add(bilibiliMemberDto);
        }
        return bilibiliMemberDtoList;
    }

    private List<BilibiliReviewDto> bilibiliReviewVo2DtoList(List<BilibiliReviewVo> bilibiliReviewVoList) {
        List<BilibiliReviewDto> bilibiliReviewDtoList = new ArrayList<>();
        for (BilibiliReviewVo bilibiliReviewVo : bilibiliReviewVoList) {
            BilibiliReviewDto bilibiliReviewDto = new BilibiliReviewDto();
            bilibiliReviewDto.setAid(bilibiliReviewVo.getAid());
            bilibiliReviewDto.setRpid(bilibiliReviewVo.getRpid());
            bilibiliReviewDto.setCtime(new Date(bilibiliReviewVo.getCtime() * 1000L));
            // 评论用户
            BilibiliMemberVo bilibiliMemberVo = bilibiliReviewVo.getBilibiliMemberVo();
            bilibiliReviewDto.setMid(bilibiliMemberVo.getMid());
            bilibiliReviewDto.setName(bilibiliMemberVo.getName());
            // 回复用户
            BilibiliReviewContentVo bilibiliReviewContentVo = bilibiliReviewVo.getBilibiliReviewContentVo();
            Optional.ofNullable(bilibiliReviewContentVo).ifPresent(bilibiliReviewContent -> {
                bilibiliReviewDto.setContent(bilibiliReviewContent.getContent());
                List<BilibiliMemberVo> bilibiliMemberVoList = bilibiliReviewContent.getBilibiliMemberVoList();
                if (UEmpty.isNotEmpty(bilibiliMemberVoList)) {
                    bilibiliReviewDto.setRepliedId(bilibiliMemberVoList.get(0).getMid());
                    bilibiliReviewDto.setRepliedName(bilibiliMemberVoList.get(0).getName());
                }
            });
            bilibiliReviewDto.setLikes(bilibiliReviewVo.getLikes());
            bilibiliReviewDto.setRoot(bilibiliReviewVo.getRoot());
            bilibiliReviewDto.setParent(bilibiliReviewVo.getParent());
            Optional.ofNullable(bilibiliReviewVo.getBilibiliReviewLocationVo())
                    .map(BilibiliReviewLocationVo::getLocation)
                    .ifPresent(location -> bilibiliReviewDto.setLocation(location.replace("IP属地：", "")));
            bilibiliReviewDtoList.add(bilibiliReviewDto);
        }
        return bilibiliReviewDtoList;
    }

    @Test
    public void testMybatisSqlTemplate() {
        List<Object> list = poetryDetailMapper.testTemplate();
        System.out.println(list);
    }

}
